View source: R/recomb_haplo_inds.R
| recomb_haplo_inds | R Documentation | 
Construct haplotypes of individuals given their ancestral blocks and the ancestral haplotype variants
recomb_haplo_inds(inds, haplo, ret_anc = FALSE)
| inds | A list of individuals in the same format as the output of  | 
| haplo | The ancestral haplotypes, which is a list of chromosomes, each of which is a list with two named elements:  | 
| ret_anc | If  | 
A list of diploid individuals, each of which is a list with two haploid individuals named pat and mat, each of which is a list of chromosomes.
If ret_anc = FALSE (default), each chromosome is a haplotype (vector of values copied from ancestors in haplo);
if ret_anc = TRUE, each chromosome is a list with named elements x for the haplotype vector and anc for the vector of ancestor name per position.
recomb_fam() for drawing recombination (ancestor) blocks, defined in terms of genetic distance.
recomb_map_inds() for transforming genetic to basepair coordinates given a genetic map.
recomb_geno_inds() for transforming the output of this function from haplotypes (a nested lists structure) to a plain genotype matrix.
# Lengthy code creates individuals with recombination data to map
# The smallest pedigree, two parents and a child (minimal fam table).
library(tibble)
fam <- tibble(
  id = c('father', 'mother', 'child'),
  pat = c(NA, NA, 'father'),
  mat = c(NA, NA, 'mother')
)
# use latest human recombination map, but just first two chrs to keep this example fast
map <- recomb_map_hg38[ 1L:2L ]
# initialize parents with this other function
founders <- recomb_init_founders( c('father', 'mother'), map )
# draw recombination breaks for child
inds <- recomb_fam( founders, fam )
# now add base pair coordinates to recombination breaks
inds <- recomb_map_inds( inds, map )
# also need ancestral haplotypes
# these should be simulated carefully as needed, but for this example we make random data
haplo <- vector( 'list', length( map ) )
# names of ancestor haplotypes for this scenario
# (founders of fam$id but each with "_pat" and "_mat" suffixes)
anc_names <- c( 'father_pat', 'father_mat', 'mother_pat', 'mother_mat' )
n_ind <- length( anc_names )
# number of loci per chr, for toy test
m_loci <- 10L
for ( chr in 1L : length( map ) ) {
    # draw random positions
    pos_chr <- sample.int( max( map[[ chr ]]$pos ), m_loci )
    # draw haplotypes
    X_chr <- matrix(
        rbinom( m_loci * n_ind, 1L, 0.5 ),
        nrow = m_loci,
        ncol = n_ind
    )
    # required column names!
    colnames( X_chr ) <- anc_names
    # add to structure, in a list
    haplo[[ chr ]] <- list( X = X_chr, pos = pos_chr )
}
# finally, run desired function!
# determine haplotypes of descendants given ancestral haplotypes
data <- recomb_haplo_inds( inds, haplo )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.