rrenv

Error: "project "path/to/file.rda" has no activated script and so cannot be activated" with renv


I am trying to use renv with my project pipeline in R.

My folder structure is

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

/rep1 is the folder of my analysis pipeline and the folder I am running my scripts from. I am keeping track of the packages I am using with renv, which I initialised in /rep1, but I have not created a snapshot yet.

/data contains file*.rda, which are produced by script1.R and have a considerable size. I cannot move any of them in my /rep1 folder. In order to use them with script2.R, I am calling them with

library(renv)
library(jsonlite)
config <- read_json("config.json")

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

and they should load the object stored in them.

Whenever I run that, though, I get the following error:

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.)                                      

Am I missing something? I have the impression something is going wrong when I switch the folder, but I am not really sure how to fix this.

Thank you in advance for your help


Solution

  • The problem here is that renv::load() is masking base::load(). In general, you should not call library(renv) in your scripts -- instead, you should prefix any renv APIs you want to use with renv::.

    Alternatively, explicitly call base::load() to ensure the right version of load() is resolved.