错误:“项目“path/to/file.rda”没有激活的脚本,因此无法使用 renv

问题描述

我正在尝试将 renv 与 R 中的项目管道一起使用。

我的文件夹结构是

.
|-- data
|   |-- file1.rda
|   |-- file2.rda
|   |-- folder1
|   |-- folder2
`-- repository
    |-- rep1
    |   |-- script1.R
    |   |-- script2.R
    |   |-- config.json
    `-- rep2

/rep1 是我的分析管道的文件夹,也是我运行脚本的文件夹。我正在跟踪我在 renv 中使用的包,这些包是在 /rep1 中初始化的,但我还没有创建快照。

/data 包含 file*.rda,由 script1.R 生成,大小相当。我无法在我的 /rep1 文件夹中移动它们中的任何一个。为了将它们与 script2.R 一起使用,我用

调用它们
library(renv)
library(jsonlite)
config <- read_json("config.json")

load(file.path(config$data_folder,"file1.rda")

他们应该加载存储在其中的对象。

但是,每当我运行它时,我都会收到以下错误

Error: project "~/data/file1.rda" has no activate script and so cannot be activated
Traceback (most recent calls last):
4: load(file.path(config$data_folder,"file1.rda"))                                 
3: renv_load_switch(project)
2: stopf(fmt,renv_path_pretty(project))                                       
1: stop(sprintf(fmt,...),call. = call.)                                      

我错过了什么吗?我感觉切换文件夹时出了点问题,但我不确定如何解决这个问题。

预先感谢您的帮助

解决方法

这里的问题是 renv::load() 掩盖了 base::load()。一般而言,您不应在脚本中调用 library(renv) -- 相反,您应该为要与 renv 一起使用的任何 renv:: API 添加前缀。

或者,显式调用 base::load() 以确保解析正确版本的 load()