使用Rscript.exe在命令行运行R脚本时设置.libPaths()

4
我正在尝试通过BAT文件在Windows命令提示符中运行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时,我会收到类似以下错误:
“Error in library(data.table) : there is no package called 'data.table' Execution halted”
我该如何通过命令提示符设置.libPaths以指向正确的软件包位置(即C:\Users\username\Documents\R\R-3.5.1\library)?
提前感谢您。

1
你觉得在脚本开头加上 .libPaths(paste("C:/Users/",Sys.getenv("USERNAME"),"/Documents/R/R-3.5.1/library",sep="")) 怎么样? - Maylo
1
我认为这个问题与“批处理文件”标签无关... - Aacini
1个回答

2

声明:我对R不熟悉。

来自R: 搜索路径

库搜索路径在启动时从环境变量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批处理命令创建环境变量

因此,您的批处理文件应该类似于以下内容:

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 安装路径是可能的,但需要读取注册表,因此稍微复杂一些。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接