我需要处理文件夹中的所有文件,文件按顺序命名,所以我认为现在是循环的好时机。处理单个文件的代码很简单:
df<-read.table("CLIM0101.WTG", skip = 3, header = TRUE)
df<-df[,-1]
df$year<-2014
df$day<-c(1:365)
write.table(df, "clim201401.txt", rownames = "FALSE")
要读取的99个文件是“CLIM0101.WTG”到“CLIM9901.WTG”,它们应该通过“clim201499.txt”写入“clim201401.txt”。这是包含文件的文件夹的链接:
https://www.dropbox.com/sh/y255e07wq5yj1nd/4dukOLxKgm
那么这里有什么问题?我不明白如何写一个循环,并没有找到如何这样做的很好的描述。以前的循环问题有非循环的答案,但似乎这次它真的是我需要的。
答案 0 :(得分:7)
我一直这样做。基本习语是
files <- list.files(....) # possibly with regexp
reslist <- lapply(files, function(f) { ... some expressions on f ... }
您只需将您的几个步骤编码为
myfun <- function(filename) {
df<-read.table(filename, skip = 3, header = TRUE)
df<-df[,-1]
df$year<-2014
df$day<-c(1:365)
newfile <- gsub(".WTG", ".txt", filename_
write.table(df, newfile, rownames = FALSE) # don't quote FALSE
}
现在您使用use myfun
,即上面的内容变为
files <- list.files(....) # possibly with regexp
invisible(lapply(files, myfun))
显然未经测试。