设置.libPaths()以使用Rscript.exe

时间:2018-11-05 11:54:22

标签: r windows cmd

我正在尝试通过Windows命令提示符上的BAT文件运行R脚本。

脚本需要一些R软件包,例如data.tabletidyR等。

出于操作原因,所有必需的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)?

谢谢。

1 个答案:

答案 0 :(得分:0)

免责声明:我不熟悉R

来自R: Search paths

  

库搜索路径在从环境启动时初始化   变量R_LIBS(应该是用冒号分隔的目录列表   R库树植根于此),然后是环境中的树库   变量R_LIBS_USER。只有当时存在的目录才会   包括在内。

     

默认情况下未设置R_LIBS,并且R_LIBS_USER设置为目录   主目录的“ R / R.version $ platform-library / x.y”(或   对于CRAN macOS版本,“ Library / R / x.y / library”),对于R x.y.z。

可以使用set VARIABLE_NAME=YOUR_VALUE批处理命令来创建environment variable

因此您的批处理文件可能应该是这样的:

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 parameter扩展为包含批处理文件的目录的完整路径,而{{1} }是批处理文件的完整路径,不带扩展名。

请注意,%~dpn0不是错字,因为%~dp0R-3.5.1包含尾部反斜杠。

这样,您可以将%~dp0复制到C:\Users\username\Documents\R,脚本仍将运行。

如果您创建脚本的另一个版本,只需复制批处理文件,使其具有与脚本相同的文件名,但扩展名为D:\Users\SOMEOTHERNAME\Documents\R而不是.bat,它应调用新脚本-该脚本具有实践证明,在调试和分发脚本时非常方便。

或者,如果您想单独安装库,则可能要使用扩展为.R的{​​{1}}。

可以提取正确的%HOMEDRIVE%%HOMEPATH%文件夹路径以及C:\Users\username安装路径,但需要读取注册表,因此更加复杂。