簡體   English   中英

rscript 使用 renv 環境

[英]Rscript to use renv environment

如何使用RScript myfile.R執行命令,以便它使用它所在的項目/目錄的 renv 環境,而不是我的默認環境?

有幾種方法:

  1. 確保您的工作目錄設置為renv項目的根目錄,並且 renv 項目的自動加載器處於活動狀態。 (您可以通過在該項目中從 R 調用renv::activate()來設置自動加載器。)

  2. 在您的腳本中,顯式調用renv::load("/path/to/project")以加載請求的項目。

如果這些方法都不夠,請在https://github.com/rstudio/renv/issues提交問題。

我相信比上述答案更簡單的方法:

Rscript -e 'renv::run("/path/to/myscript.R")'

它將從基本路徑中獲取 renv 環境。 您還可以使用項目參數指定環境。

我最近遇到了類似的問題,但@kevin-ushey 的回答是不夠的。 這是背景。 我需要能夠從任何目錄運行Rscript (因為我有幾個要從 Docker 文件調用的統計模型,當您有多個Rscript調用的長文件時,強制 Docker 文件多次具有WORKDIR太麻煩了. 此外,其中一些模型在不同的 bash 文件中被多次調用,使得在每次Rscript調用之前cd到目錄很麻煩)。 我們需要類似於 conda conda activate的東西,其中任何Rscript調用默認只使用激活的“renv 環境”,而不管您的工作目錄是什么。 這是一個虛擬示例:

  1. 使用install.packages('renv')安裝renv

  2. 使用包含beepr庫的虛擬腳本創建虛擬文件夾(僅出於示例的目的)並初始化renv環境:

mkdir ~/renv_test/
cd ~/renv_test/
echo "library(beepr); print('success')" >> test.R
Rscript -e "renv::init()"
  1. 使用以下代碼創建 Docker 映像:
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

以下是該方法的摘要:

  • 將工程復制到 docker 鏡像
  • renv基礎結構復制到一個單獨的文件夾(此處~/.renv/ )並在那里恢復項目。
  • 從項目文件夾中消除所有renv的痕跡(如果出於某種原因我們從該項目的根目錄執行腳本,我們就不會弄亂庫的路徑)。
  • 編輯.Renviron使其在~/.renv中包含恢復的庫路徑作為默認庫。 這確保任何新的 R session 將使用該庫作為第一個選項。
  • 執行位於項目文件夾中的任何 R 腳本,而無需cdWORKDIR (docker) 到項目文件夾。

如果您構建並運行之前的 Docker 映像,即使我們從未cd到項目文件夾,您也應該獲得成功聲明:

docker build -t renv_test .
docker run renv_test
[1] "success"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM