【发布时间】:2019-10-22 01:02:00
【问题描述】:
我有一个 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 一起运行,从不将它们放在一起。我想知道是否有解决方案或替代方案。谢谢。
【问题讨论】:
-
自我推销如果您不介意,我已经写了
get_var_corr可以做到这一点。目前在开发者版本中可用manymodelr可用here。 -
我想您在 cor.test 参数中的意思是
alternative而不是alterantive。此外,您可能希望增加您的列表:estimates[[i]] -
帮助(参见 ??cor.test)还提到“two.lateral”作为参数。
-
@cbo 我没看到
alterantive,是alternative。我不能对list使用增量,因为那里有 ~500 个data.frame,我已经在for loop中使用了for (i in 1:7)。 -
我的错,我复制了一个答案。 @Ronak Shah 解决方案是最好的方法。只是为了说明我的观点:for循环中的
i可以更改为j,然后递增。结果(对于 lapply, lapply 更快)将与 lapply 相同:在您的情况下,2 个列表包含 500 个元素。 :)
标签: r list dataframe for-loop lapply