R для l oop в l oop через подкаталоги для чтения SAS txt и файлов установки и привязки к кадру данных - PullRequest
1 голос
/ 03 августа 2020

У меня есть каталог (dir2 в приведенном ниже коде) с 200 подкаталогами, каждая из которых содержит файл данных .txt и файл Setup.sas. Мне нужно написать для l oop, который использует пакет asciiSetupReader, для l oop по каждому подкаталогу, прочитать файлы в нем с помощью функции sas_ascii_reader и привязать все полученные объекты чтения к одному фрейму данных. Я знаю, что это должно быть относительно просто, но у меня возникают трудности.

Я создал фрейм данных с двумя столбцами: один из списка имен файлов .txt файлов, а другой из списка сопутствующих Setup.sas files.

list_file_txt <- list.files(path = './dir1/dir2', 
                        pattern='*Data.txt', 
                        recursive=TRUE)

list_file_sas <- list.files(path = './dir1/dir2', 
                        pattern='*Setup.sas', 
                        recursive=TRUE)

files <- as.data.frame(cbind(list_file_txt,list_file_sas))

files <- files %>% 
  mutate(directory = str_sub(list_file_txt,1,7), 
         directory = paste0('/dir1/dir2/',directory))

Я попытался:

for (i in 1:nrow(files)) { 
  setwd(files$directory)
  sas_ascii_reader(dataset_name = '*Data.txt',
                   sas_name = '*Setup.sas', 
                   real_names = FALSE)
  }

Результаты с ошибкой,

Error in setwd(files$directory) : cannot change working directory

, что, как я понимаю, означает, что R не распознает строки символов в столбце files $ directory в качестве путей к файлам для ссылки.

Я также пробовал (как указано в Как импортировать файлы из подкаталогов и называть их именем подкаталога R )

library(tidyverse)
tbl <-
  list.files(path = './dir1/dir2', 
             recursive=TRUE) %>% 
  map_dfr(sas_ascii_reader, 
          dataset_name = '*Data.txt',
          sas_name = '*Setup.sas', 
          .id = "filepath")

, но получите

Error in .f(.x[[i]], ...) : is.logical(value_label_fix) is not TRUE

, которого я вообще не понимаю.

Любая помощь будет принята с благодарностью. Всем спасибо.

...