For a discussion on the difference between "site" and "branch" options of the mode argument, please see the tskit documentation at

ts_tajima(ts, sample_sets, mode = c("site", "branch", "node"), windows = NULL)



Tree sequence object of the class slendr_ts


A list (optionally a named list) of character vectors with individual names (one vector per set). If a simple vector is provided, it will be interpreted as as.list(sample_sets), meaning that a given statistic will be calculated for each individual separately.


The mode for the calculation ("sites" or "branch")


Coordinates of breakpoints between windows. The first coordinate (0) and the last coordinate (equal to ts$sequence_length) are added automatically)


For each set of individuals either a single Tajima's D value or a vector of Tajima's D values (one for each window)


check_dependencies(python = TRUE) # make sure dependencies are present

# load an example model with an already simulated tree sequence
slendr_ts <- system.file("extdata/models/introgression.trees", package = "slendr")
model <- read_model(path = system.file("extdata/models/introgression", package = "slendr"))

# load the tree-sequence object from disk
ts <- ts_load(slendr_ts, model, mutate = TRUE, mutation_rate = 1e-8, random_seed = 42)

# calculate Tajima's D for given sets of individuals in a tree sequence ts
ts_tajima(ts, list(eur = c("EUR_1", "EUR_2", "EUR_3", "EUR_4", "EUR_5"),
                   nea = c("NEA_1", "NEA_2")))
#> # A tibble: 2 × 2
#>   set       D
#>   <chr> <dbl>
#> 1 eur   0.287
#> 2 nea   0.592