我正在尝试创建一个函数,将多个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
我不确定出了什么问题。我已经检查过该目录是无数次的,当我在控制台中逐行运行代码时,它会以零碎的方式运行,它有时会起作用。 为什么该功能似乎无法连接到文件的任何帮助将不胜感激。
答案 0 :(得分:2)
我认为你的问题在于这两行:
for (i in data_files) {
raw_data <- read.csv(data_files[i])
我认为data_files
是c("data1.csv", "data2.csv")
等文件名的向量。然后在for循环中的每次迭代中,i
将是一个类似"data1.csv"
的字符串。看起来你期望它是一个数字,即当前位置的索引。你不需要索引回data_files
,你已经有了字符串,所以就这样做:
for (i in data_files) {
raw_data <- read.csv(i)