phylocomr
gives you access to the Phylocom C library, licensed under BSD 2-clause
Package API
-
ecovolve
/ph_ecovolve
- interface toecovolve
executable, and a higher level interface -
phylomatic
/ph_phylomatic
- interface tophylomatic
executable, and a higher level interface -
phylocom
- interface tophylocom
executable -
ph_aot
- higher level interface toaot
-
ph_bladj
- higher level interface tobladj
-
ph_comdist
/ph_comdistnt
- higher level interface to comdist -
ph_comstruct
- higher level interface to comstruct -
ph_comtrait
- higher level interface to comtrait -
ph_pd
- higher level interface to Faith’s phylogenetic diversity
A note about files
As a convenience you can pass ages, sample and trait data.frame’s, and phylogenies as strings, to phylocomr
functions. However, phylocomr
has to write these data.frame’s/strings to disk (your computer’s file system) to be able to run the Phylocom code on them. Internally, phylocomr
is writing to a temporary file to run Phylocom code, and then the file is removed.
In addition, you can pass in files instead of data.frame’s/strings. These are not themselves used. Instead, we read and write those files to temporary files. We do this for two reasons. First, Phylocom expects the files its using to be in the same directory, so if we control the file paths that becomes easier. Second, Phylocom is case sensitive, so we simply standardize all taxon names by lower casing all of them. We do this case manipulation on the temporary files so that your original data files are not modified.
Installation
Stable version:
install.packages("phylocomr")
Development version:
::install_github("ropensci/phylocomr")
remotes
library("phylocomr")
library("ape")
phylomatic
<- system.file("examples/taxa", package = "phylocomr")
taxa_file <- system.file("examples/phylo", package = "phylocomr")
phylo_file <- readLines(taxa_file))
(taxa_str
#> [1] "campanulaceae/lobelia/lobelia_conferta"
#> [2] "cyperaceae/mapania/mapania_africana"
#> [3] "amaryllidaceae/narcissus/narcissus_cuatrecasasii"
<- readLines(phylo_file))
(phylo_str
#> [1] "(((((eliea_articulata,homalanthus_populneus)malpighiales,rosa_willmottiae),((macrocentrum_neblinae,qualea_clavata),hibiscus_pohlii)malvids),(((lobelia_conferta,((millotia_depauperata,(layia_chrysanthemoides,layia_pentachaeta)layia),senecio_flanaganii)asteraceae)asterales,schwenkia_americana),tapinanthus_buntingii)),(narcissus_cuatrecasasii,mapania_africana))poales_to_asterales;"
ph_phylomatic(taxa = taxa_str, phylo = phylo_str)
#> [1] "(lobelia_conferta:5.000000,(mapania_africana:1.000000,narcissus_cuatrecasasii:1.000000):1.000000)poales_to_asterales:1.000000;\n"
#> attr(,"taxa_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/taxa_1789937e49b79"
#> attr(,"phylo_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/phylo_1789919b419a"
use various different references trees
library(brranching)
library(ape)
<- ape::read.tree(text=brranching::phylomatic_trees[['R20120829']])
r2 <- ape::read.tree(text=brranching::phylomatic_trees[['smith2011']])
smith2011 <- ape::read.tree(text=brranching::phylomatic_trees[['zanne2014']])
zanne2014
# R20120829 tree
<- c(
taxa_str "asteraceae/bidens/bidens_alba",
"asteraceae/cirsium/cirsium_arvense",
"fabaceae/lupinus/lupinus_albus"
)ph_phylomatic(taxa = taxa_str, phylo = r2)
#> [1] "(((bidens_alba:13.000000,cirsium_arvense:13.000000):19.000000,lupinus_albus:27.000000):12.000000)euphyllophyte:1.000000;\n"
#> attr(,"taxa_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/taxa_1789926f7be7c"
#> attr(,"phylo_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/phylo_1789952fad2e0"
# zanne2014 tree
<- c(
taxa_str "zamiaceae/dioon/dioon_edule",
"zamiaceae/encephalartos/encephalartos_dyerianus",
"piperaceae/piper/piper_arboricola"
)ph_phylomatic(taxa = taxa_str, phylo = zanne2014)
#> [1] "(((dioon_edule:121.744843,encephalartos_dyerianus:121.744850)zamiaceae:230.489838,piper_arboricola:352.234711)spermatophyta:88.058670):0.000000;\n"
#> attr(,"taxa_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/taxa_17899512a9aaf"
#> attr(,"phylo_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/phylo_17899441180ca"
# zanne2014 subtree
<- ape::extract.clade(zanne2014, node='Loganiaceae')
zanne2014_subtr <- tempfile(fileext = ".txt")
zanne_subtree_file ::write.tree(zanne2014_subtr, file = zanne_subtree_file)
ape<- c(
taxa_str "loganiaceae/neuburgia/neuburgia_corynocarpum",
"loganiaceae/geniostoma/geniostoma_borbonicum",
"loganiaceae/strychnos/strychnos_darienensis"
)ph_phylomatic(taxa = taxa_str, phylo = zanne2014_subtr)
#> [1] "((neuburgia_corynocarpum:32.807743,(geniostoma_borbonicum:32.036335,strychnos_darienensis:32.036335):0.771406):1.635496)loganiaceae:0.000000;\n"
#> attr(,"taxa_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/taxa_178995d781ede"
#> attr(,"phylo_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/phylo_178997932b0c2"
ph_phylomatic(taxa = taxa_str, phylo = zanne_subtree_file)
#> [1] "((neuburgia_corynocarpum:32.807743,(geniostoma_borbonicum:32.036335,strychnos_darienensis:32.036335):0.771406):1.635496)loganiaceae:0.000000;\n"
#> attr(,"taxa_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/taxa_178996ef2ceb7"
#> attr(,"phylo_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/phylo_178996e18949"
aot
<- system.file("examples/traits_aot", package = "phylocomr")
traits_file <- system.file("examples/phylo_aot", package = "phylocomr")
phylo_file <- system.file("examples/traits_aot_df", package = "phylocomr")
traitsdf_file <- read.table(text = readLines(traitsdf_file), header = TRUE,
traits stringsAsFactors = FALSE)
<- readLines(phylo_file)
phylo_str ph_aot(traits = traits, phylo = phylo_str)
#> $trait_conservatism
#> # A tibble: 124 × 28
#> trait trait.n…¹ node name age ntaxa n.nodes tip.mn tmn.r…² tmn.r…³ tip.sd
#> <int> <chr> <int> <chr> <dbl> <int> <int> <dbl> <int> <int> <dbl>
#> 1 1 traitA 0 a 5 32 2 1.75 1000 1000 0.440
#> 2 1 traitA 1 b 4 16 2 1.75 664 669 0.447
#> 3 1 traitA 2 c 3 8 2 1.75 668 715 0.463
#> 4 1 traitA 3 d 2 4 2 1.5 237 968 0.577
#> 5 1 traitA 4 e 1 2 2 1 57 1000 0
#> 6 1 traitA 7 f 1 2 2 2 1000 570 0
#> 7 1 traitA 10 g 2 4 2 2 1000 280 0
#> 8 1 traitA 11 h 1 2 2 2 1000 552 0
#> 9 1 traitA 14 i 1 2 2 2 1000 556 0
#> 10 1 traitA 17 j 3 8 2 1.75 693 684 0.463
#> # … with 114 more rows, 17 more variables: tsd.ranklow <int>, tsd.rankhi <int>,
#> # node.mn <dbl>, nmn.ranklow <int>, nmn.rankhi <int>, nod.sd <dbl>,
#> # nsd.ranklow <int>, nsd.rankhi <int>, sstipsroot <dbl>, sstips <dbl>,
#> # percvaramongnodes <dbl>, percvaratnode <dbl>, contributionindex <dbl>,
#> # sstipvnoderoot <dbl>, sstipvnode <dbl>, ssamongnodes <dbl>,
#> # sswithinnodes <dbl>, and abbreviated variable names ¹trait.name,
#> # ²tmn.ranklow, ³tmn.rankhi
#>
#> $independent_contrasts
#> # A tibble: 31 × 17
#> node name age n.nodes contrast1 contrast2 contr…¹ contr…² contr…³ lowval1
#> <int> <chr> <dbl> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0 a 5 2 0 0 0 0.254 1.97 1.75
#> 2 1 b 4 2 0 1.03 0 0.516 1.94 1.75
#> 3 2 c 3 2 0.267 0.535 0 0 1.87 1.5
#> 4 3 d 2 2 0.577 0 1.15 0 1.73 1
#> 5 4 e 1 2 0 0 0.707 0 1.41 1
#> 6 7 f 1 2 0 0 0.707 0 1.41 2
#> 7 10 g 2 2 0 0 1.15 0 1.73 2
#> 8 11 h 1 2 0 0 0.707 0 1.41 2
#> 9 14 i 1 2 0 0 0.707 0 1.41 2
#> 10 17 j 3 2 0.267 0.535 0 0 1.87 1.5
#> # … with 21 more rows, 7 more variables: hival1 <dbl>, lowval2 <dbl>,
#> # hival2 <dbl>, lowval3 <dbl>, hival3 <dbl>, lowval4 <dbl>, hival4 <dbl>, and
#> # abbreviated variable names ¹contrast3, ²contrast4, ³contrastsd
#>
#> $phylogenetic_signal
#> # A tibble: 4 × 5
#> trait ntaxa varcontr varcn.ranklow varcn.rankhi
#> <chr> <int> <dbl> <int> <int>
#> 1 traitA 32 0.054 1 1000
#> 2 traitB 32 0.109 1 1000
#> 3 traitC 32 0.622 59 942
#> 4 traitD 32 0.011 1 1000
#>
#> $ind_contrast_corr
#> # A tibble: 3 × 6
#> xtrait ytrait ntaxa picr npos ncont
#> <chr> <chr> <int> <dbl> <dbl> <int>
#> 1 traitA traitB 32 0.248 18.5 31
#> 2 traitA traitC 32 0.485 27.5 31
#> 3 traitA traitD 32 0 16.5 31
bladj
<- system.file("examples/ages", package = "phylocomr")
ages_file <- system.file("examples/phylo_bladj", package = "phylocomr")
phylo_file <- data.frame(
ages_df a = c('malpighiales','salicaceae','fabaceae','rosales','oleaceae',
'gentianales','apocynaceae','rubiaceae'),
b = c(81,20,56,76,47,71,18,56)
)<- readLines(phylo_file)
phylo_str <- ph_bladj(ages = ages_df, phylo = phylo_str))
(res
#> [1] "((((((lomatium_concinnum:20.250000,campanula_vandesii:20.250000):20.250000,(((veronica_candidissima:10.125000,penstemon_paniculatus:10.125000)plantaginaceae:10.125000,justicia_oblonga:20.250000):10.125000,marsdenia_gilgiana:30.375000):10.125000):10.125000,epacris_alba-compacta:50.625000)ericales_to_asterales:10.125000,((daphne_anhuiensis:20.250000,syzygium_cumini:20.250000)malvids:20.250000,ditaxis_clariana:40.500000):20.250000):10.125000,thalictrum_setulosum:70.875000)eudicots:10.125000,((dendrocalamus_giganteus:27.000000,guzmania_densiflora:27.000000)poales:27.000000,warczewiczella_digitata:54.000000):27.000000)malpighiales:1.000000;\n"
#> attr(,"ages_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/ages"
#> attr(,"phylo_file")
#> [1] "/var/folders/ss/2tpkp325521_kfgn59g44vd80000gn/T//Rtmpqx406q/phylo_17899664e6334"
plot(ape::read.tree(text = res))
Meta
- Please report any issues or bugs.
- License: MIT
- Get citation information for
phylocomr
in R doingcitation(package = 'phylocomr')
- Please note that this package is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.