Skip to contents

This function combines information from the table of individuals and table of nodes into a single data frame which can be used in downstream analyses.


ts_nodes(x, sf = TRUE)



Tree sequence object of the class slendr_ts or a phylo object extracted by ts_phylo


Should spatial data be returned in an sf format? If FALSE, spatial geometries will be returned simply as x and y columns, instead of the standard POINT data type.


Data frame with processed information from the tree sequence object. If the model which generated this data was spatial, result will be returned as a spatial object of the class sf.


The source of data (tables of individuals and nodes recorded in the tree sequence generated by SLiM) are combined into a single data frame. If the model which generated the data was spatial, coordinates of nodes (which are pixel-based by default because SLiM spatial simulations occur on a raster), the coordinates are automatically converted to an explicit spatial object of the sf class unless spatial = FALSE. See for an extensive introduction to the sf package and the ways in which spatial data can be processed, analysed, and visualised.

See also

ts_table for accessing raw tree sequence tables without added metadata annotation. See also ts_ancestors to learn how to extract information about relationship beteween nodes in the tree sequence, and how to analysed data about distances between nodes in the spatial context.


check_dependencies(python = TRUE, quit = TRUE) # dependencies must be present

#> The interface to all required Python modules has been activated.

# load an example model with an already simulated tree sequence
slendr_ts <- system.file("extdata/models/introgression_slim.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)

# extract an annotated table with (spatio-)temporal node information
#> # A tibble: 86 × 12
#>    name  pop   node_id  time time_tskit sampled remembered retained alive
#>    <chr> <fct>   <int> <dbl>      <dbl> <lgl>   <lgl>      <lgl>    <lgl>
#>  1 NEA_1 NEA         0 70000       2334 TRUE    TRUE       TRUE     FALSE
#>  2 NEA_1 NEA         1 70000       2334 TRUE    TRUE       TRUE     FALSE
#>  3 NEA_2 NEA         2 40000       1334 TRUE    TRUE       TRUE     FALSE
#>  4 NEA_2 NEA         3 40000       1334 TRUE    TRUE       TRUE     FALSE
#>  5 AFR_1 AFR         4     0          0 TRUE    TRUE       TRUE     TRUE 
#>  6 AFR_1 AFR         5     0          0 TRUE    TRUE       TRUE     TRUE 
#>  7 AFR_2 AFR         6     0          0 TRUE    TRUE       TRUE     TRUE 
#>  8 AFR_2 AFR         7     0          0 TRUE    TRUE       TRUE     TRUE 
#>  9 AFR_3 AFR         8     0          0 TRUE    TRUE       TRUE     TRUE 
#> 10 AFR_3 AFR         9     0          0 TRUE    TRUE       TRUE     TRUE 
#> # ℹ 76 more rows
#> # ℹ 3 more variables: pedigree_id <dbl>, pop_id <int>, ind_id <dbl>