我无法访问数据框
I can not access dataframe
使用以下代码,我将多个 csv 文件读入数据帧。
setwd("/path/to/files")
filenames <- gsub("\.csv$","", list.files(pattern="\.csv$"))
for(i in filenames){
assign(i, read.csv(paste(i, ".csv", sep="")))
}
当我尝试在以下代码中访问它们时
for (i in filenames) {
imanDavenportTest(i)
}
我收到以下错误
Error in apply(data, MARGIN = 1, FUN = f) :
dim(X) must have a positive length
有人可以帮助我吗?
您的 "filenames" 只是字符串,表示从 read.csv
导入的数据的名称。您需要从这些命名对象中 get
数据。
所以尝试:
for(i in filenames){
imanDavenportTest(get(i))
}
爱德华的回答是正确的。但是我想添加一个注释,因为您正在以一种非常复杂的方式处理这个问题并且没有充分利用 R。
没有理由在这里使用 assign
。您可以一次读取所有数据,并将结果存储为单个对象(列表),而不是让 N
个对象污染您的工作区。例如:
# read files in your directory
file_ls <- list.files('.', pattern=".csv$")
# use lapply to read each file and create a list of data frames
data_ls <- lapply(file_ls, read.csv)
# perform the test on each element of the list
lapply(data_ls, imanDavenportTest)
assign
通常被来自具有全局变量的语言的人们采用,但它没有利用 R 的面向对象的函数式编程。恕我直言,以这种方式使用 assign
会创建难以阅读且易维护的代码。
使用以下代码,我将多个 csv 文件读入数据帧。
setwd("/path/to/files")
filenames <- gsub("\.csv$","", list.files(pattern="\.csv$"))
for(i in filenames){
assign(i, read.csv(paste(i, ".csv", sep="")))
}
当我尝试在以下代码中访问它们时
for (i in filenames) {
imanDavenportTest(i)
}
我收到以下错误
Error in apply(data, MARGIN = 1, FUN = f) :
dim(X) must have a positive length
有人可以帮助我吗?
您的 "filenames" 只是字符串,表示从 read.csv
导入的数据的名称。您需要从这些命名对象中 get
数据。
所以尝试:
for(i in filenames){
imanDavenportTest(get(i))
}
爱德华的回答是正确的。但是我想添加一个注释,因为您正在以一种非常复杂的方式处理这个问题并且没有充分利用 R。
没有理由在这里使用 assign
。您可以一次读取所有数据,并将结果存储为单个对象(列表),而不是让 N
个对象污染您的工作区。例如:
# read files in your directory
file_ls <- list.files('.', pattern=".csv$")
# use lapply to read each file and create a list of data frames
data_ls <- lapply(file_ls, read.csv)
# perform the test on each element of the list
lapply(data_ls, imanDavenportTest)
assign
通常被来自具有全局变量的语言的人们采用,但它没有利用 R 的面向对象的函数式编程。恕我直言,以这种方式使用 assign
会创建难以阅读且易维护的代码。