исходный файл указан как строка в R - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу программным путем получить все файлы .R, содержащиеся в данном массиве, полученные с помощью функции Sys.glob().

Это код, который я написал:

# fetch the different ETL parts
parts <- Sys.glob("scratch/*.R")

if (length(parts) > 0) {
    for (part in parts) {
        # source the ETL part
        source(part)

        # rest of code goes here
        # ...
    }
} else {
    stop("no ETL parts found (no data to process)")
}

У меня проблема в том, что я не могу этого сделать или, по крайней мере, я получаю следующую ошибку:

simpleError in source(part): scratch/foo.bar.com-https.R:4:151: unexpected string constant

Я пробовал разные комбинации для функции source(), например:

source(sprintf("./%s", part))
source(toString(part))
source(file = part)
source(file = sprintf("./%s", part))
source(file = toString(part))

Не повезло.Поскольку я копирую содержимое каталога, мне нужно указать R на источник этих файлов.Поскольку это настраиваемый сценарий ETL (извлечение, преобразование и загрузка), я могу написать вручную:

source("scratch/foo.bar.com-https.R")
source("scratch/bar.bar.com-https.R")
source("scratch/baz.bar.com-https.R")

Но это грязно, и сейчас есть 3 различных шаблона извлечения.Это могут быть 8, 80 или даже 2000 различных шаблонов, поэтому писать их вручную не вариант.

Как я могу это сделать?

1 Ответ

0 голосов
/ 14 февраля 2019

Попробуйте получить список файлов с помощью dir, а затем с помощью lapply:

Например, если ваши файлы имеют форму t1.R, t2.R и т. Д. И находятся внутри пути "StackOverflow"do:

d = dir(pattern = "^t\\d.R$", path = "StackOverflow/",  recursive = T, full.names = T)
m = lapply(d, source)

Опция recursive = T будет искать все подкаталоги, а full.names = T добавит путь к именам файлов.

Если вы все еще хотите использовать Sys.glob (), это тоже работает:

d = Sys.glob(paths = "StackOverflow/t*.R")
m = lapply(d, source)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...