R语言 编写读取一堆CSV文件并将其分配给字符对象的函数时出现问题

jbose2ul  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(247)

我遇到了这个问题,因为我正在解决一个问题,我必须创建一个函数来读取一堆CSV文件到R中,然后计算特定数量的平均值作为指定文件的聚合
这是我创建这个功能的尝试。这里id是用户输入的指定他/她想要读取的文件名

pollutantmean <- function(id){
    for (i in id) {
      z <- list.files()[i]
      assign(paste('data', i,sep = ''),read.csv(z))
    }
}

在这里,我期望创建一些对象,例如“data 1”或“data 2”,但当我运行pollutantmean时,它不会创建任何对象。

id <- 1:20
    for (i in id) {
      z <- list.files()[i]
      assign(paste('data', i,sep = ''),read.csv(z))
    }

当我运行上面的代码时,它会创建指定的对象。为什么会发生这种情况。

tf7tbtn2

tf7tbtn21#

assign()函数的envirpos参数允许您指定在何处执行赋值。在最初的示例中,变量是在函数环境中创建的,而您可能希望赋值发生在.GlobalEnv中...

pollutantmean <- function(id){
    for (i in id) {
      z <- list.files()[ i ]
      assign(paste('data', i, sep = ''), read.csv(z), envir = .GlobalEnv)
    }
}
pollutantmean(1:20)
ls()

虽然上面的代码 * 将 * 工作,但我应该注意,使用assign()函数通常被认为是可怕的R编程实践。更好的解决方案可能是这样的:

pollutantmean <- function(dirpath){
  results <- lapply(list.files(path = dirpath, 
                               pattern = '.*\\.csv', 
                               full.names = TRUE), 
                    read.csv)
  names(results) <- sprintf('data%s', 1:(length(results)))
  results
}
data_list <- pollutantmean('~/your-data-directory')
data_list$data1 |> head()

相关问题