有没有办法在一个r脚本文件中循环遍历目录

问题描述 投票:0回答:2

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

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')

它工作得很好,但现在我想缩小,所以说,所以我可以将上述代码应用于所有其他文件夹/目录(观察2,观察3等),而无需经过并更改setwd()逐一。

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

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

r loops directory
2个回答
0
投票

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

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
}

0
投票

你可以用你的观察矢量

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中绘制每个文件

© www.soinside.com 2019 - 2024. All rights reserved.