如何使用RScript myfile.R
命令在项目/目录的renv环境中执行,而不是默认环境?
确保你的工作目录设置为你的 renv
项目的根目录,并且 renv 项目的自动加载器处于活动状态。(你可以在该项目中调用 R 的 renv::activate()
来设置自动加载器。)
在你的脚本中,显式地调用 renv::load("/path/to/project")
来加载所需的项目。
如果这些方法都不行,请到 https://github.com/rstudio/renv/issues 提交问题。
install.packages('renv')
安装renv
。mkdir ~/renv_test/
cd ~/renv_test/
echo "library(beepr); print('success')" >> test.R
Rscript -e "renv::init()"
FROM rocker/r-base
ENV PROJ_ROOT='/usr/local/src/renv_test'
ENV RENV_DIR='/usr/local/.renv/'
COPY . $PROJ_ROOT
# Copy the projects renv infrastructure to RENV_DIR and remove all traces of renv from PROJ_ROOT
RUN mkdir -p $RENV_DIR/renv/ && \
cp $PROJ_ROOT/renv.lock $RENV_DIR && \
cp $PROJ_ROOT/renv/activate.R $RENV_DIR/renv/ && \
echo "source('renv/activate.R')" >> $RENV_DIR/.Rprofile && \
cd $RENV_DIR && \
Rscript -e "renv::restore()" && \
cd $PROJ_ROOT && Rscript -e "renv::deactivate()" && \
rm -rf renv/ renv.lock
# Set RENV_DIR's restore library as the default library
RUN echo $(cd $RENV_DIR && Rscript -e "cat(paste0('R_LIBS=', renv::paths\$library()), sep = '\n')") >> $HOME/.Renviron
# Run any script from any directory as if you had 'renv activated'
CMD Rscript $PROJ_ROOT/test.R
renv
基础设施复制到单独的文件夹中(这里是~/.renv/
),并在那里恢复项目。renv
的所有痕迹(这样我们就不会因为某些原因从此项目的根目录执行脚本而弄乱库的路径)。.Renviron
,使其包含已恢复库路径~/.renv
作为默认库。这确保任何新的R会话都将使用该库作为第一个选项。cd
或WORKDIR
(docker)到项目文件夹。cd
到项目文件夹:docker build -t renv_test .
docker run renv_test
[1] "success"
我相信以下这种方法比上面的回答更简单:
Rscript -e 'renv::run("/path/to/myscript.R")'
它将从基本路径中获取renv环境。您还可以使用项目参数指定环境。