考虑一下,我有两个矩阵,一个有响应,一个有预测变量,我计算每个变量的距离矩阵:
resp <- as.data.frame(matrix(rnorm(6*6,mean=1000,sd=100), 6, 6))
pred <- as.data.frame(matrix(rnorm(6*6,mean=1000,sd=100), 6, 6))
colnames(resp) <- paste("Resp_",letters[1:6],sep="")
colnames(pred) <- paste("Pred_",LETTERS[1:6],sep="")
#calculate distance matrices for each variable per site
Z <- lapply(resp, function(x) dist(x))
A <- lapply(pred, function(x) dist(x))
我想为A和Z之间的每对矩阵执行mantel统计:
library(vegan)
res1 <- mantel(Z[[1]], A[[1]], method="spearman", perm=999)
res2 <- mantel(Z[[2]], A[[1]], method="spearman", perm=999)
或广泛地说
res(i,j) <- mantel(Z[[1:i]], A[[1:j]], method="spearman", perm=999)
我有兴趣检索res1[[3]]
和res1 [[4]]
中的r和p值,可能在矩阵中,就像
cor(resp, pred)
我怎么能在循环中做到这一点?
谢谢!
答案 0 :(得分:1)
你可以试试这个:
r <- p <- matrix(NA, 6, 6)
colnames(r) <- colnames(p) <- names(A)
rownames(r) <- rownames(p) <- names(Z)
for (i in 1:6) {
for (j in 1:6) {
m <- mantel(Z[[i]], A[[j]], method="spearman", perm=999)
r[i, j] <- m$statistic
p[i, j] <- m$signif
}
}