【问题标题】:Is there a way to loop through directories in one r-script file有没有办法遍历一个 r-script 文件中的目录
【发布时间】:2019-09-14 01:10:18
【问题描述】:

我有几百个文件夹(观察),每个文件夹都有几个文本文件(每个都是试用版)。在一些帮助下,我能够弄清楚如何遍历文本文件并创建图形的一个图像,以便将其保存在文件夹/目录中......

setwd("~/data/observation1")

library(ggplot2)

files <- list.files(pattern=".txt")
for (i in files){
  mylist <- lapply(setNames(files, files), read.table, header = T)
  mylist <- lapply(names(mylist), function(i) {cbind(mylist[[i]], ID = i)})
  mydata <- do.call(rbind, mylist)
}

ggplot(mydata, aes(x = place, y = firing_rate, colour = ID)) + geom_point() + geom_path()
dev.print(pdf, 'observation1.pdf')

它工作得很好,但现在我正在尝试缩小,可以这么说,所以我可以将上述代码应用于所有其他文件夹/目录(observation2、observation3 等),而无需通过并更改setwd() 一个一个。

此外,如果我能以某种方式将所有绘图(每个文件夹一个)保存为一个几百页的大 pdf,那也很棒。

非常感谢任何关于如何做这两件事甚至开始它们的建议,我很乐意回答任何问题。

【问题讨论】:

  • 您为什么不想使用 setwd() 来更改文件夹?您可以一次性完成。
  • 您可以考虑使用purrr 包来简化此操作。 serialmentor.com/blog/2016/6/13/…
  • 可以使用list.files中的参数full.names = TRUE获取文件的完整路径

标签: r loops directory


【解决方案1】:

这是一种方法,您可以根据需要进行修改:

setwd("~/data")

my_folders <- c("observation1", "observation2", "observation3") # etc.

for(j in my_folders) {
  files <- list.files(path = j, pattern=".txt", full.names=T)
  # ... etc
}

【讨论】:

    【解决方案2】:

    您可以使用以下方法制作您的观察向量

    vector <- dir(path="~/data/")  # this will list all your observations
    mylist<- list()
    for ( i in 1:length(vector){
    setwd(paste0("~/data/",vector[i]))
    
    files[[i]] <- list.files(pattern=".txt")
    for (j in files[[i]]){
      mylist[[i]] <- lapply(setNames(files[[i]], files[[i]]), read.table, header = T)
      mylist[[i]] <- lapply(names(mylist[[i]]), function(j) {cbind(mylist[[i]], ID = j)})
      mydata[[i]] <- do.call(rbind, mylist[[i]])
      }
      }
    

    然后你可以在 mylist 中绘制每个文件

    【讨论】:

    • 它给了我一个“文件中的错误[[i]]
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2015-03-05
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多