Есть ли способ перебрать каталоги в одном файле r-скрипта - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть пара сотен папок (наблюдений), каждая из которых содержит несколько текстовых файлов (каждая из которых является пробной). Мне удалось с некоторой помощью выяснить, как перебирать текстовые файлы и создавать одно изображение графика, чтобы оно сохранялось в папке / каталоге ...

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-файла с несколькими сотнями страниц.

Любой совет о том, как сделать эти две вещи или даже начать их, очень ценится, и я с удовольствием отвечу на любые вопросы.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Вы можете сделать вектор своих наблюдений с помощью

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

0 голосов
/ 24 апреля 2019

Вот один подход, который вы можете изменить в соответствии со своими потребностями:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...