用字符对象内的名称替换列表对象的名称

时间:2019-01-29 18:46:41

标签: r

我要比较25种不同的距离矩阵。 这里是四个:

dist.merry <- matrix(rnorm(100),10,10)  
dist.pip <- matrix(runif(100),10,10)  
dist.frodo <- matrix(rnorm(100),10,10)  
dist.sam  <- matrix(runif(100),10,10)  

我将所有可能的对写入具有两行六列的字符对象中:

Cmb1 <- combn(ls(pattern="dist"), 2)
str(Cmb1)
chr [1:2, 1:6] "dist.frodo" "dist.merry" "dist.frodo" "dist.pip" "dist.frodo" "dist.sam" "dist.merry" ..

然后我执行成对的壁炉架测试并将结果保存在列表中。

library(vegan)
results <- lapply(split(Cmb1, col(Cmb1)), function(x) unlist(mantel(get(x[1]), get(x[2]), perm=999, "pearson")[3:4]))

我无法将名称写到列表对象上。

这是very old question of mine的后续活动。现在,用于重命名列表对象的部分问题似乎失败了。

问题是我如何将成对组合写入结果列表的名称?

1 个答案:

答案 0 :(得分:1)

不确定我是否正确理解了要求,但这可以工作:

names(results) <- unlist(lapply(split(Cmb1, col(Cmb1)), toString))

它给出:

names(results) 
# [1] "dist.frodo, dist.merry" "dist.frodo, dist.pip"   "dist.frodo, dist.sam"   "dist.merry, dist.pip"  
# [5] "dist.merry, dist.sam"   "dist.pip, dist.sam" 

如果您希望使用其他分隔符而不是,,则可以将paste()与自定义collapse参数一起使用:

names(results) <- unlist(lapply(split(Cmb1, col(Cmb1)), paste, collapse = "_"))