Организация кода в разработке R-пакета

При разработке пакетов в R все R исходные файлы помещаются в подкаталог R/и весь скомпилированный код помещается в подкаталог src/,

Я хотел бы добавить какую-то организацию к файлам в этих папках, а не создавать все на верхнем уровне. Например, допустим, я гипотетически разрабатываю клиент-серверное приложение. Логично, я хотел бы организовать все мои исходные файлы клиента R в R/client/ и все мои файлы R сервера в R/server/,

Можно ли организовать код в подпапках при разработке пакета, и если да, то как? Руководство по написанию расширений R не дает никаких рекомендаций и не дает R CMD build обнаруживать файлы, хранящиеся в подпапках R/,

4 ответа

Решение

Вы не можете использовать подпапки без дополнительной настройки (например, определение собственного make-файла). Лучшее, что вы можете сделать, это использовать префиксы: client-a.r, client-b.r, server-a.r, server-b.r, так далее.

Расширяя комментарий к ИМХО неправильного ответа Хэдли:

Посмотрите на пакет Matrix (написанный членами R Core), который имеет пять папок ниже src/и два из них содержат другие подпапки. Другой пример - пакеты Rsymphony (со), написанные и поддерживаемые участником R Core.

Делать это не для слабонервных. R сильно предпочитает src/Makevars фрагмент по полной src/Makefile для того, чтобы иметь возможность построить свой собственный Makefile версии для разных субархитектур. Но если вы знаете немного и хотите приложить усилия, это вполне выполнимо - и это делается.

Это все еще не делает это рекомендованным все же.

Я поспорил с основной командой R Разрешить подпапки в каталоге "package/R/". Кажется, они не очень хотят его улучшить. Так что мой рабочий процесс выглядит следующим образом.

1) Создайте проект R так же, как другие пакеты, но разрешите подкаталоги в папке R/ такие как

R/mcmc/a.R R/mcmc/b.R R/prediction/p1.R R/predection/p2.R

2) Когда мне нужно их упаковать, я конвертирую все файлы в R/ как

R/mcmc_a.R R/mcmc_b.R R/prediction_p1.R R/predection_p2.R ... со мной package.flatten() функция

3) Затем я устанавливаю сплющенную версию в R.

Я написал простой скрипт для Linux, чтобы сделать все

https://github.com/feng-li/flutils/blob/master/inst/bin/install.HS

Признавая, что тема немного устарела, я просто подумал, что добавлю свое решение этой проблемы. Обратите внимание, что моя проблема похожа, но меня интересует только сохранение иерархий папок при разработке.

В процессе разработки я организовываю свои файлы сценариев в подпапках по своему усмотрению, но вместо того, чтобы бороться с плоской иерархией R в производстве, я добавил, так сказать, собственную "постоянную времени компиляции".

То есть в каждый файл, расположенный в подпапке (не в скриптах верхнего уровня /), я добавляю следующее:

if (!exists("script.debug"))
    script.debug = FALSE

Затем я загружаю все остальные зависимости следующим образом:

source.list <- c(
            "script_1.R",
            "script_2.R",
            "script_3.R",
            "script_4.R"
             )

if (script.debug)
    source.list <- paste("./script_subfolder/", source.list, sep="")

lapply(source.list, source)

По умолчанию предполагается, что код находится в рабочем состоянии (source.debug = FALSE), поэтому при разработке просто убедитесь, что source.debug = TRUE и сценарий / папка проекта установлены в качестве рабочего каталога перед загрузкой любых файлов сценариев.

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

Другие вопросы по тегам