我需要在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")
}
}
答案 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
有一天会回来困扰你(FALSE
和TRUE
都没有受到保护。
答案 1 :(得分:1)
在进行更改后将其添加到循环中:
assign(filesInfolder[i], wrkngFile, envir=globalenv())
如果你想把它们放到一个列表中,一种方法就是在你的循环之外声明一个列表:
mylist = list()
然后,在你的循环中,这样做:
mylist[[filesInfolder[i] = wrkngFile]]
然后您可以通过查看以下内容访问每个对象:
mylist[[filename]]
来自全球环境