Cor函数在R语言中返回单个值而不是多个

时间:2015-12-25 13:41:53

标签: r correlation head

我正在尝试将cor函数应用于数据集。以下是我的代码:

corr <- function(directory, threshold = 0) {
      for (i in 1:332) {
      data = read.csv(paste(directory, '/',
          formatC(i, width = 3, flag = '0'), '.csv', sep = '')) # reading all files
      }
      cv = numeric() #initializing list
      data = na.omit(data) #omitting NAs from read file
      if (nrow(data) > threshold) { 
          cv = c(cv, cor(data[,2], data[,3])) #if number of rows more than threshold, get correlation of data
      }
     cv
 }

在命令行中,我可以调用:

cr <- corr('specdata', 150)
head(cr)

我的预期输出是:

[1] -0.01896 -0.14051 -0.04390 -0.06816 -0.12351 -0.07589

但我获得的返回值仅为:

[1] -0.01896

我不完全了解cor,为什么我得到这个结果,请帮忙。我的所有CSV文件都包含普通表。谢谢!

2 个答案:

答案 0 :(得分:2)

对于两个向量x和y,cor(x,y)返回x和y的相关系数,只是一个数字。这就是你的代码正在做的事情。

cor(1:10,2:11)#返回1.0

如果您想要更多相关性,则需要发送包含变量的数据框。对于数据帧&#39; df&#39; (例如)3列,然后cor(df)将返回3乘3矩阵。

df <- data.frame(a=1:3, b=c(3,2,8), c=c(12,3,8))

cor(df)
       a         b          c
a  1.0000000 0.7777138 -0.4435328
b  0.7777138 1.0000000  0.2184630
c -0.4435328 0.2184630  1.0000000

答案 1 :(得分:0)

您在编辑中添加了for循环。您似乎正在尝试为directory中的每个csv返回相关常量。

我们可以尝试这样的事情。

df1 <- data.frame(x = rnorm(10), y = rnorm(10))
df2 <- data.frame(x = rnorm(10), y = rnorm(10))
df3 <- data.frame(x = rnorm(10), y = rnorm(10))

write.csv(df1, "1.csv")
write.csv(df2, "2.csv")
write.csv(df3, "3.csv")

corr <- function(directory){
    temp = list.files(path = directory, pattern = "[0-9]+.csv")
    # in your case
    # temp = list.files(path = directory, pattern = "[0-9]{3}.csv")
    dat = lapply(temp, function(x){read.csv(x, header = T)})
    corlist <- lapply(dat, function(x){cor(cor(x[,1], x[,2]))})
    unlist(corlist)
}

corr(".")

0.07766259 0.24449723 0.20367101