我想做成对#34;所有对所有"多个数据帧的组合,在我的情况下与Mantel测试。
我想要比较大约50种不同的矩阵: Obj1,Obj2,Obj3,...,Objn
library(vegan)
mantel(Obj1, Obj2)
我是否可以针对所有组合进行循环,可能省略冗余对?那么,只做n * (n-1)/2
的一半?
我正在将结果收集到数据框中:
result <- data.frame(mantel_r = NA, significance = NA)
mant <- mantel(Obj1, Obj2)
result[01, c("mantel_r", "significance")] <- mant[3:4]
是否可以将循环与此基本代码结合使用?可能是根据输入给result.dataframe的行命名?
答案 0 :(得分:4)
我猜mantel
来自vegan
library(vegan)
names1 <- ls(pattern="Obj")
names1 #I created 3 matrices with names starting with Obj
#[1] "Obj1" "Obj2" "Obj3"
Cmb1 <- combn(names1, 2)
lst1 <- lapply(split(Cmb1, col(Cmb1)), function(x) unlist(mantel(get(x[1]), get(x[2]))[3:4]))
我假设你希望list
元素有一些名字。
names(lst1) <- sapply(lst1, function(x) { paste(paste(names(x), x, sep="_"), collapse="_") })
lst1