使用R中的循环处理文件夹中的所有文件

时间:2014-01-29 16:40:10

标签: r

我需要处理文件夹中的所有文件,文件按顺序命名,所以我认为现在是循环的好时机。处理单个文件的代码很简单:

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

那么这里有什么问题?我不明白如何写一个循环,并没有找到如何这样做的很好的描述。以前的循环问题有非循环的答案,但似乎这次它真的是我需要的。

1 个答案:

答案 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))

显然未经测试。