2015-11-18 3 views
1

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

sourceDir <- function(path, trace = TRUE, ...) { 
    for (nm in list.files(path, pattern = "\\.[RrSsQq]$")) { 
    print(nm) 
    if(trace) cat(nm,":")   
    source(file.path(path, nm), ...) 
    if(trace) cat("\n") 
    } 
} 

sourceDir("R/DataGenerator") 

Когда я использую «CRTL + SHIFT + B» на RStudio, я вижу, что файлы nm. Но как только пакет загружен, ни одна из функций, определенных в подкаталоге R/DataGenerator, не доступна, не используя :: или не используя :::.

Как я могу экспортировать функции, определенные в подкаталогах R? Возможно ли это?

+0

Отсутствие надлежащей поддержки для иерархии вложенных пакетов была одной из причин, побудивших меня написать ** <[modules] (https://github.com/klmr/modules)> **, которая реализует превосходную Python-подобную систему пакетов/модулей для Р. Вы можете захотеть сделать снимок. –

ответ

1

Используйте Разобрать: поле в файле ОПИСАНИЕ указать путь к файлам, которые должны быть включены

Collate: foo.R bar/baz.R 

хелпер для создания функции сортировки линии может быть что-то вроде

fls = paste(dir(pattern="R", recursive=TRUE), collapse=" ") 
cat(strwrap(sprintf("Collate: %s", fls), exdent=4), sep="\n") 
+0

Это один из элегантных фрагментов кода - просто остерегайтесь того, что ваш «шаблон» слишком широк, он будет захватывать не-R исходных файлов (и он чувствителен к регистру, поэтому он будет пропускать все исходные файлы, которые не используют капитал -R 'extension). Это должно быть '' \\. [RR] $ ''. –

Смежные вопросы