0

我有两个不同大小的列表。一个列表(命名为 * trees * )由系统发育树(类 phylo)组成,第二个列表(命名为 * data_values*)由数值组成。列表*树*的每个系统发育树的提示名称与值列表中每个元素的名称匹配。但是列表data_values由比每棵树的尖端更多的元素组成。

library(phytools)
library(ape)
#original tree:
tree_original = rtree(12, tip.label = paste0("species", LETTERS[1:12]))
##list of trees:
nodes = 14:23
trees = lapply(nodes,extract.clade,phy=tree_orignal)
names(trees) <-  paste0("", 14:23)
data_values <- list() 
for (i in 1:17) { data_values[[paste0('species', LETTERS[i])]] <- round(rnorm(10, 5, 4), 1) }

我想使用物种作为索引来匹配两个列表(树和数据值),以便为每棵树提供一个数据框(参见下面的示例)。我可以单独为列表树中的每棵树执行此操作,但是由于我的物种列表比此示例大得多,我想知道我是否可以为所有树列表执行此操作(如下)而不运行一棵一棵树,像这样:

tree14 = data_values[match(trees$`14`$tip.label, names(data_values))]
tree14 = llply(tree14, function(x) sapply(x, as.numeric)) 
tree14_df = ldply(tree14, .fun=identity)  **I will need each result as a data.frame**
        .id  1    2   3     4    5    6    7    8    9   10
1  speciesE -0.5 3.4  2.0  5.3  3.7  8.2  3.5 -2.0  3.1 10.2
2  speciesL  6.8 4.3  7.1  5.5  4.9  2.5  0.3 -3.8  4.1  6.4
3  speciesA  2.5 2.5  9.6 10.6  2.2  7.1  4.1  4.4  6.0  6.7
4  speciesI -3.5 7.2  6.8  2.8  7.5  8.9 13.4 13.1  1.8  5.5
5  speciesC  4.3 2.2 10.0  7.4  4.4  8.3 -0.7  3.6  9.2  6.3
6  speciesH  6.3 6.1  2.2  4.6  7.4  7.3  2.9  0.6  3.0  5.2
7  speciesB  8.3 1.7 -0.1  4.5  9.4 -0.2  7.5  1.4 -0.3  4.6
8  speciesD  6.2 5.8  6.6  1.1  5.4 11.1 -1.1  0.0  7.9  0.4
9  speciesG  3.5 2.8  1.4 11.6 -2.8 11.0  3.5  2.8  3.1  4.8
10 speciesK  0.9 4.9  5.4  2.7 -0.7  5.1 18.3  4.9  2.5 -0.7

tree15 = data_values[match(trees$`15`$tip.label, names(data_values))]
tree15 = llply(tree15, function(x) sapply(x, as.numeric)) 
tree15_df = ldply(tree15, .fun=identity) 
        .id 1    2    3    4   5    6    7   8    9   10
1 speciesE -0.5 3.4  2.0  5.3 3.7  8.2  3.5 -2.0  3.1 10.2
2 speciesL  6.8 4.3  7.1  5.5 4.9  2.5  0.3 -3.8  4.1  6.4
3 speciesA  2.5 2.5  9.6 10.6 2.2  7.1  4.1  4.4  6.0  6.7
4 speciesI -3.5 7.2  6.8  2.8 7.5  8.9 13.4 13.1  1.8  5.5
5 speciesC  4.3 2.2 10.0  7.4 4.4  8.3 -0.7  3.6  9.2  6.3
6 speciesH  6.3 6.1  2.2  4.6 7.4  7.3  2.9  0.6  3.0  5.2
7 speciesB  8.3 1.7 -0.1  4.5 9.4 -0.2  7.5  1.4 -0.3  4.6

... this operation goes until tree23
4

0 回答 0