将 for 循环的输出文件发送到 R 中的新目录

jju*_*lip 5 directory for-loop r

我使用了 for 循环来加载一些文件,执行一些任务并将结果写入新的 csv 文件。存储输入文件的目录是在运行循环之前设置的,但我不想将输出 csv 文件保存到同一目录,而是将其发送到循环内的新目录。

这是一个非常简单的 for 循环示例:

p <- "~/Desktop/MyFolder"
setwd(p)

files <- list.files(path=dir, pattern="csv$", full.names=FALSE, recursive=FALSE)

for(i in 1:length(files)){

  f <- lapply(files[i], read.csv, header=TRUE, stringsAsFactors=FALSE)
  cat2 <- f[f$mod ==2, c(1,6)]
  filename <- files[1]
  tn <- strsplit(filename,"_")[[1]][1] 
  fn <- paste(tn, "_trimmed.csv", sep="")
  write.csv(cat2, file=fn, row.names=FALSE)

}
Run Code Online (Sandbox Code Playgroud)

我对 R 还很陌生,还不知道如何做到这一点。任何帮助,将不胜感激。

Mif*_*iff 6

因此,假设这些文件夹尚不存在,并且您想要创建它们,然后将 output.csv 放入每个文件夹中,则以下操作应该有效:

p <- "~/Desktop/MyFolder"
setwd(p)

files <- list.files(path=dir, pattern="csv$", full.names=FALSE, recursive=FALSE)

for(i in 1:length(files)){

  f <- lapply(files[i], read.csv, header=TRUE, stringsAsFactors=FALSE)
  #why not:
  #f <- read.csv(files[i],header=TRUE, stringsAsFactors=FALSE)
  cat2 <- f[f$mod ==2, c(1,6)] 
  dir.create(paste0("folder",i), showWarnings = FALSE) #stops warnings if folder already exists
  write.csv(cat2, file.path(paste0("folder",i), "output.csv"), row.names=FALSE)
}
Run Code Online (Sandbox Code Playgroud)

你的lapply()陈述对我来说似乎没有必要,但也许我遗漏了一些东西