我有一个 data.frame 列表,我想通过每个 data.frame 运行 cor.test
。
data.frame
有 8 列,我想针对第 8 列的前 7 列中的每一列运行 cor.test
。
我首先设置存储数据的列表
estimates = list()
pvalues = list()
然后是结合lapply
的循环
for (i in 1:7){
corr <- lapply(datalist, function(x) {cor.test(x[,i], x[,8], alternative="two-sided", method="spearman", exact=FALSE, continuity=TRUE)})
estimates= corr$estimate
pvalues= corr$p.value
}
它运行没有任何错误,但estimates
显示NULL
哪一部分出了问题?我曾经在 cor.test
上运行 for
循环,或者使用 lapply
运行,从不将它们放在一起。我想知道是否有解决方案或替代方案。谢谢。
最佳答案
我们可以使用 sapply
,以 mtcars
上的示例显示,其中 cor.test
是针对第一列对所有列执行的。
lst <- list(mtcars, mtcars)
lapply(lst, function(x) t(sapply(x[-8], function(y) {
val <- cor.test(y, x[[8]], alternative ="two.sided",
method="spearman", exact=FALSE, continuity=TRUE)
c(val$estimate, pval = val$p.value)
})))
[[1]]
# rho pval
#mpg 0.7065968 6.176953e-06
#cyl -0.8137890 1.520674e-08
#disp -0.7236643 2.906504e-06
#hp -0.7515934 7.247490e-07
#drat 0.4474575 1.021422e-02
#wt -0.5870162 4.163577e-04
#qsec 0.7915715 6.843882e-08
#am 0.1683451 3.566025e-01
#gear 0.2826617 1.168159e-01
#carb -0.6336948 9.977275e-05
#[[2]]
# rho pval
#mpg 0.7065968 6.176953e-06
#cyl -0.8137890 1.520674e-08
#.....
这将返回两列矩阵的列表,其中分别包含 estimate
和 p.value
。
关于r - lapply 和 for 循环通过 R 中的 data.frames 列表运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56478767/