如何使用R读取文件夹中的所有文件并创建具有相同文件名的对象?

时间:2015-09-19 08:06:54

标签: r function object assign read.table

我需要在R中创建一个读取文件夹中所有文件的函数(假设所有文件都是以制表符分隔格式的表)并在全局环境中创建具有相同名称的对象。我做了类似的事情(见下面的代码);我能够编写一个函数来读取文件夹中的所有文件,在每个文件的第一列中进行一些更改并将其写回到该文件夹​​中。但我找不到如何将读取文件分配给将保留在全局环境中的对象。

changeCol1 <- function () {
     filesInfolder <- list.files()
     for (i in 1:length(filesInfolder)){
         wrkngFile <- read.table(filesInfolder[i])
         wrkngFile[,1] <- gsub(0,1,wrkngFile[,1])
         write.table(wrkngFile, file = filesInfolder[i], quote = F, sep = "\t")
         }
     }

2 个答案:

答案 0 :(得分:2)

最好将它们全部分配给名为list的元素(并且它也非常容易):

changeCol1 <- function () {
  filesInfolder <- list.files()
  lapply(filesInfolder, function(fname) {
    wrkngFile <- read.table(fname)
    wrkngFile[,1] <- gsub(0, 1, wrkngFile[,1])
    write.table(wrkngFile, file=fname, quote=FALSE, sep="\t")
    wrkngFile
  }) -> data
  names(data) <- filesInfolder
  data
}

a_list_full_of_data <- changeCol1()

另外,F有一天会回来困扰你(FALSETRUE都没有受到保护。

答案 1 :(得分:1)

在进行更改后将其添加到循环中:

assign(filesInfolder[i], wrkngFile, envir=globalenv())

如果你想把它们放到一个列表中,一种方法就是在你的循环之外声明一个列表:

mylist = list()

然后,在你的循环中,这样做:

mylist[[filesInfolder[i] = wrkngFile]]

然后您可以通过查看以下内容访问每个对象:

mylist[[filename]]

来自全球环境