循环一组列以执行spearman相关分析

时间:2013-06-27 16:30:41

标签: r loops correlation

我有兴趣进行长矛相关测试,我确定第一列(x)中的数据是否与我表格中剩余的2,314个条目中的任何一个负相关。

当我手动输入详细信息以将xy进行比较时,我正在使用的输入似乎很好,例如:

data<-read.table("input.txt",header=TRUE)
x=data[,1]
y=data[,2]
cor.test(x,y,method="s")

..但是,当我应用for循环迭代所有2314列时,它(1)不起作用,但(2)也没有错误。

data<-read.table("input.txt",header=TRUE)
x=data[,1]
y=data[,2:2314]
for (i in y){
cor.test(x,i,method="s")
}

以下是我的数据的简短示例:

GeneData    Test_Gene   Gene1   Gene2   Gene3   Gene4
Day1    429.92  5948.10 49.09   7965.23 1367.21
Day2    273.64  6394.40 66.39   4858.45 1529.97
Day3    2505.83 3384.90 45.99   5881.83 906.59
Day4    1290.60 3364.54 48.15   5754.26 894.16

我想看看“Test_Gene”是否与任何剩余的样本(Gene1,Gene2,Gene3或Gene4)相关。

2 个答案:

答案 0 :(得分:2)

您可以使用lapply

x <- data[1]
lapply(data[-1], cor, x = x, method = "spearman")

要执行cor.test,您必须使用双括号将第一列提取为数字向量(而不是单列数据框):

x <- data[[1]]
lapply(data[-1], cor.test, x = x, method = "spearman")

答案 1 :(得分:1)

您的代码存在的问题是您对cor.test的结果没有做任何事情。您需要将其分配给<-print的内容。

x=data[,1]
y=data[,2:2314]

corr.values <- vector("list", 2313)
for (i in 1:length(y) ){
            corr.values[[i]] <- cor.test(x, y[[i]], method="s")
            }
head(corr.values)