Настройка .libPaths() для запуска R-скриптов из командной строки с помощью Rscript.exe

Я пытаюсь запустить сценарии R через файлы BAT в командной строке Windows.

Для сценариев требуется несколько пакетов R, таких как data.table, tidyR и т. д.

По операционным причинам все необходимые пакеты R и зависимости (включая data.table) устанавливаются в C:\Users\username\Documents\R\R-3.5.1\library. Мне не разрешено устанавливать RStudio в этой среде.

Когда я пытаюсь "C:\Program Files\R\R-3.5.1\bin\x64\Rscript.exe" script.R, я получаю сообщение об ошибке, похожее на

Ошибка в библиотеке (data.table): нет пакета с именем data.table. Выполнение остановлено.

Как настроить .libPaths с помощью командной строки, чтобы он указывал на правильное расположение пакетов (т. е. на C:\Users\username\Documents\R\R-3.5.1\library)?

Заранее спасибо.


person user799188    schedule 05.11.2018    source источник
comment
как насчет добавления: .libPaths(paste("C:/Users/",Sys.getenv("USERNAME"),"/Documents/R/R-3.5.1/library",sep="")) в начале вашего скрипта?   -  person Maylo    schedule 05.11.2018
comment
Я думаю, что этот вопрос не имеет отношения к тегу batch-file...   -  person Aacini    schedule 05.11.2018


Ответы (1)


Отказ от ответственности: я не знаком с R.

Из R: пути поиска:

Путь поиска библиотеки инициализируется при запуске из переменной среды R_LIBS (которая должна представлять собой список каталогов, разделенных двоеточиями, в которых находятся корни деревьев библиотек R), за которыми следуют каталоги в переменной среды R_LIBS_USER. Будут включены только каталоги, которые существуют на данный момент.

По умолчанию R_LIBS не установлен, а R_LIBS_USER установлен в каталог «R/R.version$platform-library/x.y» домашнего каталога (или «Library/R/x.y/library» для сборок CRAN macOS), для R х.у.з.

переменная среды может быть создана с помощью пакетной команды set VARIABLE_NAME=YOUR_VALUE.

Таким образом, ваш пакетный файл, вероятно, должен быть примерно таким:

cd /d "C:\INSERT_PATH_TO_DIRECTORY_CONTAINING_script.R"
set "R_LIBS=C:\Users\username\Documents\R\R-3.5.1\library"
"C:\Program Files\R\R-3.5.1\bin\x64\Rscript.exe" script.R

Однако из соображений переносимости (скажем, коллега просит копию вашего скрипта или ваш компьютер умирает) я предлагаю поместить скрипт, R-библиотеку и пакетный файл в один каталог, скажем, C:\Users\username\Documents\R. Пакетный файл C:\Users\username\Documents\R\script.bat становится:

cd /d "%~dp0"
set "R_LIBS=%~dp0R-3.5.1\library"
"%PROGRAMFILES%\R\R-3.5.1\bin\x64\Rscript.exe" "%~dpn0.R"

%PROGRAMFILES% переменная среды заменяется на полный путь к папке program files, %~dp0 параметр заменяется на полный путь к каталог, в котором находится ваш пакетный файл, а %~dpn0 – это полный путь к пакетному файлу без расширения.

Обратите внимание, что %~dp0R-3.5.1 не является опечаткой, поскольку %~dp0 включает обратную косую черту.

Таким образом, вы можете скопировать C:\Users\username\Documents\R в D:\Users\SOMEOTHERNAME\Documents\R, и скрипт все равно будет работать.

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

В качестве альтернативы, если вы предпочитаете устанавливать библиотеки отдельно, вы можете использовать %HOMEDRIVE%%HOMEPATH%, который расширяется до C:\Users\username.

Извлечение правильного пути к папке Documents, а также пути установки R возможно, но требует чтения реестра и, следовательно, немного сложнее.

person Jack White    schedule 05.11.2018