Learn R Programming

README

R. Mark Sharp, Ph.D. 2026-07-08

nprcgenekeepr

Version 2.0.0 (2026-07-07)

Introduction

The goal of nprcgenekeepr is to implement Genetic Tools for Colony Management. It was initially conceived and developed as a Shiny web application at the Oregon National Primate Research Center (ONPRC) to facilitate some of the analyses they perform regularly. It has been enhanced to have more capability as a Shiny application and to expose the functions so they can be used either interactively or in R scripts.

This work has been supported in part by NIH grants P51 RR13986 to the Southwest National Primate Research Center and P51 OD011092 to the Oregon National Primate Research Center.

At present, the application supports 5 functions:

  1. Quality control of studbooks contained in text files or Excel workbooks and of pedigrees within LabKey Electronic Health Records (EHR)
  2. Creation of pedigrees from a lists of animals using the LabKey EHR integration
  3. Creation and display of an age by sex pyramid plot of the living animals within the designated pedigree
  4. Generation of Genetic Value Analysis Reports
  5. Creation of potential breeding groups with and without proscribed sex ratios and defined maximum kinships.

For more information see:
A Practical Approach for Designing Breeding Groups to Maximize Genetic Diversity in a Large Colony of Captive Rhesus Macaques (Macaca mulatta) Vinson, A ; Raboin, MJ Journal Of The American Association For Laboratory Animal Science, 2015 Nov, Vol.54(6), pp.700-707 [Peer Reviewed Journal]

Installation

You can install the CRAN version of nprcgenekeepr from the R console prompt with:

install.packages("nprcgenekeepr")

You can install the development version of nprcgenekeepr from GitHub from the R console prompt with:

install.packages("devtools")
devtools::install_github(file.path("rmsharp", "nprcgenekeepr"))

All missing dependencies should be automatically installed.

Online Documentation

You can find the complete online documentation at https://rmsharp.github.io/nprcgenekeepr/.

At the top of the page are three menus to the right of the Home icon: Reference, Articles, and Changelog.

The Reference menu at the top of the page brings up the list of documentation for Data objects, Major Features and Functions, Primary interactive functions and All exposed functions.

The Articles menu brings up the list of vignettes, which are, except for Development Plans, tutorials for using the package.

The Changelog brings up a copy of the NEWS file of the package, which records the major changes made for each version.

Running Shiny Application

The toolset available within nprcgenekeepr can be used inside standard R scripts. However, it was originally designed to be used within a Shiny application that can be started with:

library(nprcgenekeepr) # nolint: undesirable_function_linter
runGeneKeepR()

(runModularApp() also still launches the application but is deprecated in favor of runGeneKeepR().)

Summary of Major Functions

Quality Control

Studbooks maintained by breeding colonies generally contain information of varying quality. The quality control functions of the toolkit check to ensure all animals listed as parents have their own line entries, all parents have the appropriate sex listed, no animals are listed as both a sire and a dam, duplicate entries are removed, pedigree generation numbers are added, and all dates are valid dates. In addition, exit dates are added if possible and are consistent with other information such as departure dates and death dates. Current ages of animals that are still alive are added if a database connection is provided via a configuration file and the user has read permission on a LabKey server with the demographic data in an EHR (Electronic Health Record) module. See LabKey documentation.

Parents with ages below a user selected threshold are identified. A minimum parent age in years is set by the user and is used to ensure each parent is at least that age on the birth date of an offspring. The minimum parent age defaults to 2 years. This check is not performed for animals with missing birth dates.

Creation of Pedigree From a List of Potential Breeders and LabKey

The user can enter a list of focal animals in a CSV file that will be used to create a pedigree containing all direct relative (ancestors and descendants) via the labkey.selectRows function within the Rlabkey package if a database connection is provided via a configuration file and the user has read permission on a LabKey server with the demographic data in an EHR (Electronic Health Record) module.

Two configuration files are needed to use the database features of nprcgenekeepr with LabKey. The first file is named _netrc on Microsoft Windows operating systems and .netrc otherwise, allows the user to authenticate with LabKey through the LabKey API and is fully described by LabKey documentation

The second file is named _nprcgenekeepr_config on Microsoft Windows operating systems and .nprcgenekeepr_config otherwise and is the nprcgenekeepr configuration file An image of this example configuration file is included as a data object and can be loaded and viewed with the following lines of R code in the R console.

data("exampleNprcgenekeeprConfig")
View(exampleNprcgenekeeprConfig)

Display of an age by sex pyramid plot

Adapted from https://www.thoughtco.com/age-sex-pyramids-and-population-pyramids-1435272 on 20190603. Written by Matt Rosenberg. Updated May 07, 2019.

The most important demographic characteristic of a population is its age-sex structure. Age-sex pyramids (also known as population pyramids) graphically display this information to improve understanding and make comparison easy. The population pyramid sometimes has a distinctive pyramid-like shape when displaying a growing population.

How to Read the Age-Sex Graph

An age-sex pyramid breaks down a population into male and female genders and age ranges. Usually, you’ll find the left side of the pyramid graphing the male population and the right side of the pyramid displaying the female population.

Along the horizontal axis (x-axis) of a population pyramid, the graph displays the population either as a total population of that age or as a percentage of the population at that age. The center of the pyramid starts at zero population and extends out to the left for males and right for females in increasing size, or proportion of the population.

Along the vertical axis (y-axis), age-sex pyramids display two-year age increments, from birth at the bottom to old age at the top.

Genetic Value Analysis Reports

The Genetic Value Analysis is a ranking scheme developed at ONPRC to indicate the relative breeding value of animals in the colony. The scheme uses the mean kinship for each animal to indicate how inter-related it is with the rest of the current breeding colony members. Genome uniqueness is used to provide an indication of whether or not an animal is likely to possess alleles at risk of being lost from the colony. Under the scheme, animals with low mean kinship or high genome uniqueness are ranked more highly.

Breeding Group Formation

One of the goals in breeding group formation is to avoid the potential for mating of closely related animals. Since behavioral concerns and housing constraints will also be taken into account in the group formation process, it is our goal to provide the largest number of animals possible from a list of candidates that can be housed together without risk of consanguineous mating. To that end, this function uses information from the Genetic Value Analysis to search for the largest combinations of animals that can be produced from a list of candidates.

The default options do not consider the sex of individuals when forming the groups, though this has likely been a consideration by the user in selecting the candidate group members. Optionally the user may select to form harem groups, which considers the sex of individuals when forming groups and restricts the number of males to one per group.

Copy Link

Version

Install

install.packages('nprcgenekeepr')

Monthly Downloads

328

Version

2.0.0

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

R. Mark Sharp

Last Published

July 26th, 2026

Functions in nprcgenekeepr (2.0.0)

calcA

Count each individual's rare alleles per simulation
calcFGSE

Calculate the standard error of founder genome equivalents
calcGU

Calculate genome uniqueness for each population ID
applyKinshipOverrides

Apply outside-information kinship overrides to a kinship matrix
calcFG

Calculate founder genome equivalents
calcFE

Calculate founder equivalents
assignAlleles

Assign parent alleles randomly
calcGUSE

Calculate the standard error of genome uniqueness
calcAge

Calculate animal ages
calcFEFG

Calculate founder equivalents and founder genome equivalents
calcRetention

Calculate allelic retention
calcGeneDiversity

Calculate gene diversity from founder genome equivalents
calculateSexRatio

Calculate the sex ratio of a set of animals
checkKinshipOverrides

Validate a kinship overrides table
calcNeVariance

Calculate the variance effective population size
checkErrorLst

Check an error list for non-empty fields
checkGenotypeFile

Check genotype file
calcNeSexRatio

Calculate the demographic sex-ratio effective population size
convertStatusCodes

Convert status indicators to a standardized code
correctParentSex

Correct the sex of animals listed as a sire or dam
convertDate

Convert character date columns to Date type
checkChangedColsLst

Check a changed-columns list for non-empty fields
convertAncestry

Convert ancestry information to a standard code
convertFromCenter

Convert from-center information to a logical value
chooseDate

Choose the earlier or later of two dates
convertRelationships

Convert pairwise kinship values to relationship categories
countLoops

Count the number of loops in a pedigree tree
exampleNprcgenekeeprConfig

Example nprcgenekeepr configuration file (loadable)
createExampleFiles

Create example pedigree and ID-list CSV files
convertSexCodes

Convert a sex indicator to a standardized code
dataframe2string

Convert a data frame to a character vector
create_wkbk

Create an Excel workbook with worksheets
chooseAlleles

Combine two allele vectors by Mendelian sampling
checkRequiredCols

Check column names for required columns
checkParentAge

Check parent ages against a minimum age
countKinshipValues

Count kinship-value occurrences across simulated pedigrees
cumulateSimKinships

Compute kinship summary statistics across simulations
countFirstOrder

Count first-order relatives
filterReport

Filter a genetic value report to selected animals
examplePedigree

Example pedigree object (from ExamplePedigree.csv)
fillGroupMembersWithSexRatio

Form breeding groups to match a target sex ratio
findOffspring

Count total offspring for each animal
findLoops

Find loops in a pedigree tree
getAnimalsWithHighKinship

List each animal's high-kinship relatives
getAncestors

Recursively collect an individual's ancestors
filterKinMatrix

Filter a kinship matrix to selected IDs
fixColumnNames

Standardize pedigree column names
findPedigreeNumber

Determine the pedigree number for each ID
createSimKinships

Build kinship matrices from simulated pedigrees
createPedTree

Create a pedigree tree (PedTree)
finalRpt

Genetic-value report list prior to ranking
getFileDirectRelatives

Get the direct relatives of selected animals from a pedigree file
getDemographics

Get demographic data
getDatedFilename

Prepend the date and time to a file name
getChangedColsTab

Build the changed-columns tab panel
filterThreshold

Filter out kinship pairs below a threshold
getErrorTab

Build the error-list tab panel
geneDrop

Simulate gene dropping through a pedigree
getDescendantPedigree

Reduce a pedigree to a group and its descendants
focalAnimals

Focal animal IDs from examplePedigree
getEmptyErrorLst

Create an empty errorLst object
filterPairs

Filter kinship pairs by the animals' sexes
getIdsWithOneParent

Get ids of animals with only one parent
getGenotypes

Get genotypes from file
getLkDirectAncestors

Get the direct ancestors of selected animals
getIncludeColumns

Get the superset of columns that can be in a pedigree file
getBoxWhiskerDescription

Get Box and Whisker Plot Description
getGeneticDiversityStats

Assemble breeding-group genetic diversity heat-map statistics
getPotentialSires

List potential sires
getGVPopulation

Get the population of interest for the Genetic Value analysis
getProbandPedigree

Reduce a pedigree to probands and their ancestors
getFocalAnimalPed

Get pedigree based on list of focal animals
getFocalAnimalPedFromFile

Get a focal-animal pedigree from a pedigree file
findGeneration

Determine the generation number for each ID
getAutoIdFormat

Get the auto-generated unknown-ID format
getTokenList

Get tokens from a character vector of lines
getPyramidPlot

Create an age-sex pyramid plot of a pedigree
getVersion

Get the version number of nprcgenekeepr
getPyramidAgeDist

Get the age distribution for the pedigree
getPedigree

Get pedigree from file
getSpeciesMinBreedingAge

Look up the minimum breeding age (years) for one or more species and sexes
getSpeciesGestation

Look up the maximum gestation period (days) for one or more species
getPedMaxAge

Get the maximum age of any animal in the pedigree
getFounders

Get the founder ids from a pedigree
headerDisplayNames

Convert internal column names to display or header names
isFounder

Identify the founders in a pedigree
getCurrentAge

Calculate current age in years from a birth date
getConfigFileName

Get the configuration file name for the system
getRequiredCols

Get required column names for a studbook
kinshipMatrixToKValues

Extract a kValue table from a kinship matrix
getSiteInfo

Get site information
lacy1989Ped

Small hypothetical pedigree (Lacy 1989)
getDateErrorsAndConvertDatesInPed

Find date errors and convert dates in a pedigree
getLkDirectRelatives

Get the direct relatives of selected animals from the LabKey EHR
kinMatrix2LongForm

Reformat a kinship matrix into long form
is_valid_date_str

Test whether a string is a valid date
getGVGenotype

Extract genotype data for a genetic value report
groupAddAssign

Add animals to a breeding group or form new groups
getPossibleCols

Get possible column names for a studbook
gvaConvergence

Recommend gene-drop iterations for a pedigree
getPotentialParents

Get potential parents for animals with unknown parents
getOffspring

Get offspring to corresponding animal IDs provided
getParents

Get parents to corresponding animal IDs provided
get_elapsed_time_str

Format the elapsed time since a start time
get_and_or_list

Join a character vector into an and/or list
kinship

Generate a kinship matrix
makeSimPed

Make a simulated pedigree from representative sires and dams
makeRelationClassesTable

Make a relation classes table from kinship pairs
makeFounderStatsTable

Create Founder Statistics HTML Table
makeGeneticDiversityHeatmap

Make a genetic diversity heat map
modBreedingGroupsServer

Breeding Groups Module - Server Function
kinshipMatricesToKValues

Build a kValue table from a list of kinship matrices
modGeneticValueServer

Genetic Value Analysis Module - Server Function
loadSiteConfig

Load the site configuration for the modular Shiny application
modGeneticValueUI

Genetic Value Analysis Module - UI Function
lacy1989PedAlleles

Gene-drop alleles for lacy1989Ped (5000 iterations)
makeExamplePedigreeFile

Write copy of nprcgenekeepr::examplePedigree into a file
makeGeneticSummaryTable

Create Genetic Summary Statistics HTML Table
makeCEPH

Make a CEPH-style pedigree for each id
modGeneticDiversityServer

Genetic Diversity Module - Server Function
makeGroupMembers

Make the initial groupMembers animal list
makeGroupNum

Make the initial grpNum list
makeGrpNum

Deprecated alias for makeGroupNum
obfuscateDate

Obfuscate dates with a random day offset
nprcgenekeepr-package

nprcgenekeepr: Genetic Tools for Colony Management
getPedDirectRelatives

Get the direct relatives of selected animals from a pedigree
modGeneticDiversityUI

Genetic Diversity Module - UI Function
modORIPReportingServer

ORIP Reporting Module - Server Function
modORIPReportingUI

ORIP Reporting Module - UI Function
modPotentialParentsServer

Potential Parents Module - Server Function
pedGood

Valid example studbook (no QC errors)
modBreedingGroupsUI

Breeding Groups Module - UI Function
modPotentialParentsUI

Potential Parents Module - UI Function
modPedigreeServer

Pedigree Browser Module - Server Function
pedMissingBirth

Example studbook missing the birth date column
obfuscateId

Create ID aliases of a specified length
obfuscatePed

Obfuscate a pedigree by aliasing IDs and shifting dates
modPedigreeUI

Pedigree Browser Module - UI Function
pedWithGenotypeReport

Genetic-value report for pedWithGenotype
pedWithGenotype

Pedigree with simulated genotypes (from qcPed)
pedInvalidDates

Example studbook with invalid birth dates
processQcStudbookResult

Process qcStudbook Result into UI-Friendly Format
print.summary.nprcgenekeeprErr

Print an nprcgenekeepr summary object
pedFemaleSireMaleDam

Example studbook with sex-mismatched parents
pedSameMaleIsSireAndDam

Example studbook with a male as both sire and dam
pedDuplicateIds

Example studbook with a duplicated record
modInputUI

Data Input and Quality Control Module - UI Function
loadSpeciesOverrides

Load user-configurable species reproductive-parameter overrides
modInputServer

Data Input and Quality Control Module - Server Function
hasGenotype

Check for genotype data in dataframe
logModuleEvent

Log module events
hasBothParents

Check whether an animal has both parents
reportGV

Generate a genetic value report for a pedigree
removeAutoGenIds

Remove automatically generated IDs from pedigree
removeDuplicates

Remove duplicate records from pedigree
mapIdsToObfuscated

Map IDs to Obfuscated IDs
meanKinship

Calculate mean kinship for each animal in a kinship matrix
rhesusGenotypes

Rhesus genotypes (two haplotypes per animal)
modGvAndBgDescServer

Genetic Value and Breeding Group Description Module - Server Function
modGvAndBgDescUI

Genetic Value and Breeding Group Description Module - UI Function
modSummaryStatsServer

Summary Statistics Module - Server Function
offspringCounts

Tabulate offspring counts, optionally by population
modSummaryStatsUI

Summary Statistics Module - UI Function
ped1Alleles

Gene-drop alleles example (baboon pedigree)
setPopulation

Flag animals as the population of interest
set_seed

Set a reproducible RNG seed across R versions
setExit

Set the exit date when no exit column exists
setLabKeyDefaults

Configure Rlabkey authentication for the current session
pedOne

Raw pedigree-file fragment for testing (5 columns)
savePlotToFile

Save Plot to File
removePotentialSires

Remove potential sires from a list of IDs
setAutoIdFormat

Set the auto-generated unknown-ID format
removeEarlyDates

Remove dates before a specified year
pedSix

Raw pedigree-file fragment for testing (7 columns)
smallPedTree

Pedigree tree built from smallPed
smallPed

Hypothetical 17-animal pedigree
runModularApp

Run the Modular Version of GeneKeepR (Deprecated)
removeUnknownAnimals

Remove placeholder animals added for unknown parents
trimPedigree

Trim a pedigree to a group's ancestors
runQcStudbook

Run Quality Control on Studbook with UI-Friendly Results
removeUninformativeFounders

Remove uninformative founders
withinIntegerRange

Get integer within a range
rankSubjects

Rank animals by genetic value
readKinshipOverrides

Read a kinship overrides table from a file
summary.nprcgenekeeprErr

Summarize a studbook quality-control error list
speciesGestation

Per-species reproductive parameters
summarizeKinshipValues

Summarize imputed kinship values
modPyramidServer

Age-Sex Pyramid Module - Server Function
modPyramidUI

Age-Sex Pyramid Module - UI Function
qcPedGvReport

Genetic-value report for qcPed
qcBreeders

Potential breeder IDs (29 baboons)
qcPed

Example quality-controlled baboon pedigree
qcStudbook

Run quality control on a studbook or pedigree
runGeneKeepR

Run the GeneKeepR Shiny Application
saveDataframesAsFiles

Write copy of dataframes to either CSV, TXT, or Excel file
safeExecute

Execute an expression with error handling
shouldShowOripTab

Determine if the ORIP Reporting tab should be displayed
shouldShowChangedColsTab

Determine if Changed Columns tab should be displayed
rhesusPedigree

Obfuscated rhesus pedigree object
toCharacter

Force dataframe columns to character
addGenotype

Add genotype data to pedigree file
appUI

Main Application UI for nprcgenekeepr
addBackSecondParents

Add back single parents trimmed pedigree
addSexAndAgeToGroup

Build a group data frame with ID, sex, and age
alleleFreq

Count each allele in a vector
addUIds

Add placeholder IDs for unknown parents
addAnimalsWithNoRelative

Add an NA value for animals with no relative
appServer

Main Application Server for nprcgenekeepr
addIdRecords

Add ego records with NA parent IDs
addParents

Add parents