L oop для списка файлов по частям - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь скопировать около 10000 файлов и вставить его в другой каталог со следующим кодом:

f <- c (MYFILE $ COL1) # PART 1
m <- paste0 ("(", paste (f, collapse = "|"), ") .xml") #PART 2
files <- list.files (pattern = m) #PART 3

file.copy (paste0 (getwd (), "/", files), paste0 (getwd (), "/ FILES_XML /", files), overwrite = TRUE) # PART 4

Когда я пытаюсь запустить часть files <- list.files (pattern = m), появляется следующее сообщение:

assertion 'tree-> num_tags == num_tags' failed in executing regexp: file 'tre-compile.c', line 634

Чтобы предотвратить появление сообщения, я подумал о запуске кода из 500 частей в 500. Как бы я делал это по частям, используя for?

Ответы [ 3 ]

2 голосов
/ 07 февраля 2020

Может быть, что-то вроде следующего сделает это.
Обратите внимание на использование help("file.path") в качестве замены paste.

n <- length(f)
sp <- rep(1:ceiling(n / 5), each = 5, length.out = n)
lapply(split(f, sp), function(x){
  m <- paste0 ("(", paste (x, collapse = "|"), ")\\.xml")
  files <- list.files(pattern = m)
  infiles <- file.path(getwd(), files)
  outfiles <- file.path(getwd(), "FILES_XML", files)
  file.copy(infiles, outfiles, overwrite = TRUE)
})
0 голосов
/ 07 февраля 2020

Это ошибка регулярного выражения, которая, вероятно, исходит из строки files <- list.files(pattern = m), которая не может быть исправлена ​​путем фрагментирования процесса копирования. Бьюсь об заклад, вы можете исправить это, подумав более внимательно при построении строки поиска m.

0 голосов
/ 07 февраля 2020

Ну, хотя я не понимаю ваших рассуждений, как это предотвратило бы появление сообщения об ошибке (?) Здесь, как запустить часть file.copy в al oop:

lower <- 1
for (upper in seq(500, 10000, by=500)) {
  file.copy(paste0(getwd (), "/", files[lower:upper]), paste0 (getwd (), "/ FILES_XML /", files[lower:upper]), overwrite = TRUE)
  lower <- upper + 1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...