【问题标题】:I can not access dataframe我无法访问数据框
【发布时间】:2020-05-02 00:48:28
【问题描述】:

使用以下代码,我将多个 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


【解决方案1】:

爱德华的回答是正确的。但是我想添加一个注释,因为您正在以一种非常复杂的方式进行此操作,并且没有充分利用 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 会创建难以阅读且易于维护的代码。

【讨论】:

  • 第二次也可以使用lapply而不是for
【解决方案2】:

您的“文件名”只是表示从read.csv 导入的数据名称的字符串。你需要get来自这些命名对象的数据

那就试试吧:

for(i in filenames){
  imanDavenportTest(get(i))
}

【讨论】:

    猜你喜欢
    • 2016-12-18
    • 2020-06-12
    • 2020-02-12
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2019-12-12
    • 2015-02-19
    相关资源
    最近更新 更多