在多对列上提取和格式化cor.test的结果

时间:2015-12-17 04:57:57

标签: r statistics correlation

我正在尝试生成相关矩阵的表输出。具体来说,我使用for循环来识别4:40到第1列中所有数据之间的相关性。虽然表的结果是不错的,但确定要比较的内容什么在检查cor.test的属性时,我发现data.name被赋予x[1]y[1],这不足以追溯哪些列与哪些列进行比较。这是我的代码:

input <- read.delim(file="InputData.txt", header=TRUE)
x<-input[,41, drop=FALSE]
y=input[,4:40]
corr.values <- vector("list", 37)
for (i in 1:length(y) ){
  corr.values[[i]] <- cor.test(x[[1]], y[[i]], method="pearson")
}
lres <- sapply(corr.values, `[`, c("statistic","p.value","estimate","method", "data.name"))
lres<-t(lres)
write.table(lres, file="output.xls", sep="\t",row.names=TRUE)

输出文件如下所示:

       statistic        p.value     estimate                                  method            data.name   
1   -2.030111981    0.042938137 -0.095687495    Pearson's product-moment correlation    x[[1]] and y[[i]]
2   -2.795786248    0.005400938 -0.131239287    Pearson's product-moment correlation    x[[1]] and y[[i]]
3   -2.099114632    0.036368337 -0.098908573    Pearson's product-moment correlation    x[[1]] and y[[i]]
4   -1.920649487    0.055413178 -0.090571599    Pearson's product-moment correlation    x[[1]] and y[[i]]
5   -1.981326962    0.048168291 -0.093408365    Pearson's product-moment correlation    x[[1]] and y[[i]]
6   -2.80390736      0.00526909 -0.131613912    Pearson's product-moment correlation    x[[1]] and y[[i]]
7   -1.265138839    0.206482153 -0.059798855    Pearson's product-moment correlation    x[[1]] and y[[i]]
8   -2.861448156    0.004415411 -0.134266636    Pearson's product-moment correlation    x[[1]] and y[[i]]
9   -2.103403363    0.035990039 -0.099108672    Pearson's product-moment correlation    x[[1]] and y[[i]]
10  -3.610094985    0.000340807 -0.168498786    Pearson's product-moment correlation    x[[1]] and y[[i]]

显然,这并不完美,因为行已编号,无法分辨哪些相关性。有没有办法来解决这个问题?我尝试了许多解决方案但没有工作。我知道诀窍必须是编辑data.name属性,但我无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:3)

这里有一种返回数据框的方法,其中包含所有cor.test结果,其中还包括计算每个相关性的变量的名称:我们创建一个函数来提取{{的相关结果然后使用cor.test将函数应用于我们想要相关的每对变量。 mapply会返回一个列表,因此我们使用mapply将其转换为数据框。

do.call(rbind, ...)