我无法访问数据帧

问题描述 投票:0回答:2

通过下面的代码,我将多个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

谁能帮帮我?

r dataframe assign
2个回答
2
投票

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 的方式创建了难以阅读和易维护的代码。


2
投票

你的 "文件名 "是简单的字符串,代表了从你的文件中导入的数据的名称。read.csv. 你需要 get资料 从这些命名的对象。

所以试一试。

for(i in filenames){
  imanDavenportTest(get(i))
}
© www.soinside.com 2019 - 2024. All rights reserved.