计算多个数据框架上的列之间的相关性

时间:2017-03-21 04:43:27

标签: r function if-statement for-loop correlation

我正在尝试创建一个函数,将多个csv文件读入数据框,检查有多少完整(没有NAs)观察,然后,如果完整观察的数量大于阈值,作为参数传递给函数,返回一个向量,其中包含符合条件的每个数据框中两列之间的相关性。

现在我有以下代码:

> dput(corr)
function (threshold = 0, directory = "/Users/marsh/datasciencecoursera/specdata/") 
{
setwd(directory)
data_files <- list.files()
output <- c()
for (i in data_files) {
    raw_data <- read.csv(data_files[i])
    raw_data_nona <- na.omit(raw_data)
    if (nrow(raw_data_nona) > threshold) {
        sulfate <- raw_data_nona[, "sulfate"]
        nitrate <- raw_data_nona[, "nitrate"]
        correlation <- cor(sulfate, y = nitrate)
        ouput <- c(ouput, correlation)
    }
}
ouput
}

当我尝试运行阈值为150,200,400等的代码时,我收到一条错误消息:

Error in file(file, "rt") : cannot open the connection In addition: Warning message:
In file(file, "rt") : cannot open file 'NA': No such file or directory 

我不确定出了什么问题。我已经检查过该目录是无数次的,当我在控制台中逐行运行代码时,它会以零碎的方式运行,它有时会起作用。 为什么该功能似乎无法连接到文件的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我认为你的问题在于这两行:

for (i in data_files) {
    raw_data <- read.csv(data_files[i])

我认为data_filesc("data1.csv", "data2.csv")等文件名的向量。然后在for循环中的每次迭代中,i将是一个类似"data1.csv"的字符串。看起来你期望它是一个数字,即当前位置的索引。你不需要索引回data_files,你已经有了字符串,所以就这样做:

for (i in data_files) {
    raw_data <- read.csv(i)