通过下面的代码,我将多个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
谁能帮帮我?
Edward的答案是正确的。但我想补充一点,因为你的方法相当复杂,没有充分利用R的优势。
没有理由使用 assign
这里。您可以一次性读取所有数据,并将结果存储为一个单一对象(列表),而不是有一个 N
污染您的工作空间的对象。例如,R的对象导向函数式编程。
# 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的面向对象的函数式编程的优势。IMHO,使用 assign
的方式创建了难以阅读和易维护的代码。
你的 "文件名 "是简单的字符串,代表了从你的文件中导入的数据的名称。read.csv
. 你需要 get
的 资料 从这些命名的对象。
所以试一试。
for(i in filenames){
imanDavenportTest(get(i))
}