Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Warning messages on load after upgrading to renv 1.0.0 #1558

Closed
mgriffiths2 opened this issue Jul 17, 2023 · 10 comments · Fixed by #1590
Closed

Warning messages on load after upgrading to renv 1.0.0 #1558

mgriffiths2 opened this issue Jul 17, 2023 · 10 comments · Fixed by #1590
Assignees

Comments

@mgriffiths2
Copy link

I was using renv 0.17.3 with no problem, then upgraded to 1.0.0 using renv::upgrade()

Now whenever I open my project, or run renv::load() I get a list of warning messages:

- Project '<project name>' loaded. [renv 1.0.0]
Warning messages:
1: In is.na(value) :
  is.na() applied to non-(list or vector) of type 'language'
2: In if (is.na(value)) default else as.logical(value) :
  the condition has length > 1
3: In is.na(value) :
  is.na() applied to non-(list or vector) of type 'language'
4: In if (is.na(value)) default else as.logical(value) :
  the condition has length > 1
5: In is.na(value) :
  is.na() applied to non-(list or vector) of type 'language'
6: In if (is.na(value)) default else as.logical(value) :
  the condition has length > 1
7: In is.na(value) :
  is.na() applied to non-(list or vector) of type 'language'
8: In if (is.na(value)) default else as.logical(value) :
  the condition has length > 1
9: In is.na(value) :
  is.na() applied to non-(list or vector) of type 'language'
10: In if (is.na(value)) default else as.logical(value) :
  the condition has length > 1

It still seems to work fine, but it would be nice to get rid of the warnings.

@kevinushey
Copy link
Collaborator

Do you get more detail if you use:

options(error = renv:::renv_error_handler_call())
options(warn = 2L)

Perhaps by putting this in your project's .Rprofile before source("renv/activate.R") is run?

@kevinushey
Copy link
Collaborator

A reproducible example would also help; e.g. if you could share your project sources publicly (e.g. on GitHub).

@mgriffiths2
Copy link
Author

mgriffiths2 commented Jul 18, 2023

Unfortunately I'm not able to share the whole project. Would the renv lockfile help?

Here is what I get when I load with the options you suggested above:

Error in is.na(value) : 
  (converted from warning) (converted from warning) is.na() applied to non-(list or vector) of type 'language'
Traceback (most recent calls last):
35: source("renv/activate.R")
34: withVisible(eval(ei, envir))
33: eval(ei, envir)
32: eval(ei, envir)
31: local(...) at activate.R#2
30: eval.parent(substitute(eval(quote(expr), envir)))
29: eval(expr, p)
28: eval(expr, p)
27: eval(quote(...), new.env())
26: eval(quote(...), new.env())
25: if (renv_bootstrap_load(project, libpath, version))
      return(TRUE) at activate.R#1159
24: renv::load(project) at activate.R#847
23: renv_load_finish(project, lockfile)
22: renv_load_report_synchronized(project, lockfile)
21: (function() {
        renv_scope_options(renv.verbose = FALSE)
        status(project = project, sources = FALSE)
    })()
20: status(project = project, sources = FALSE)
19: renv_status_impl(project, libpaths, lockpath, sources, cache)
18: renv_snapshot_dependencies(project, dev = FALSE)
17: dynamic(list(project = project, type = type, dev = dev), renv_snapshot_dependencies_impl(project, 
        type, dev))
16: the$dynamic_objects[[id]] %||% {
        dlog("dynamic", "memoizing dynamic value for '%s'", id)
        value
    }
15: renv_snapshot_dependencies_impl(project, type, dev)
14: withCallingHandlers(renv_dependencies_impl(path = path, root = project, 
        field = "Package", errors = config$dependency.errors(), dev = dev), 
        renv.dependencies.problems = function(cnd) {
            if (identical(config$dependency.errors(), "ignored")) 
                return()
            if (interactive() && !proceed()) 
                cancel()
        }, renv.dependencies.elapsed_time = function(cnd) {
            if (!type %in% c("packrat", "implicit")) 
                return()
            elapsed <- cnd$data
            limit <- getOption("renv.dependencies.elapsed_time_threshold", 
                default = 10L)
            if (elapsed < limit) 
                return()
            lines <- c("", "NOTE: Dependency discovery took %s during snapshot.", 
                "Consider using .renvignore to ignore files, or switching to explicit snapshots.", 
                "See `?renv::dependencies` for more information.", 
                "")
            writef(lines, renv_difftime_format(elapsed))
        })
13: renv_dependencies_impl(path = path, root = project, field = "Package", 
        errors = config$dependency.errors(), dev = dev)
12: renv_dependencies_discover(files, progress, errors)
11: bapply(paths, renv_dependencies_discover_impl)
10: lapply(x, f, ...)
 9: FUN(X[[i]], ...)
 8: tryCatch(filebacked("dependencies", path, callback), error = function(cnd) {
        warning(cnd)
        NULL
    })
 7: tryCatchList(expr, classes, parentenv, handlers)
 6: tryCatchOne(expr, names, parentenv, handlers[[1L]])
 5: value[[3L]](cond)
 4: warning(cnd)
 3: withRestarts({
        .Internal(.signalCondition(cond, message, call))
        .Internal(.dfltWarn(message, call))
    }, muffleWarning = function() NULL)
 2: withOneRestart(expr, restarts[[1L]])
 1: doWithOneRestart(return(expr), restart)

@nopsybot
Copy link

nopsybot commented Jul 18, 2023

Hi, I also ran into warnings using 'renv::upgrade()' to migrate from 0.17.3 to 1.0.0 as an initial installation of the new version. I can't clarify the issue, but got a quick and dirty workaround:

  1. remove renv package from project
  2. close project
  3. install new renv version (I did with install.packages())
  4. run renv::activate(project = "your/r-project/to/upgrade")
  5. when entering the project, follow the interactive instructions to record the new renv version in the lockfile

Anyway, thank you for the renv update!

@mgriffiths2
Copy link
Author

It seems the error is occurring during dependency-finding:

Finding R package dependencies ... [104/123] Error in is.na(value) : (converted from warning) (converted from warning) is.na() applied to non-(list or vector) of type 'language'

@mgriffiths2
Copy link
Author

I have now worked around this by specifying my dependencies explicitly in a DESCRIPTION file. I guess the error comes from parsing our code when finding dependencies.

@franzbischoff
Copy link

Here is my output:

- Project '/xxxxx/xxxxx' loaded. [renv 1.0.0]
Error in is.na(value) : 
  (converted from warning) (converted from warning) is.na() applied to non-(list or vector) of type 'language'
Traceback (most recent calls last):
46: local({
        try_source <- function(file) {
            if (file.exists(file)) {
                source(file)
                TRUE
            }
            else {
                FALSE
            }
        }
        r_profile <- Sys.getenv("R_PROFILE_USER_OLD")
        Sys.setenv(R_PROFILE_USER_OLD = "", R_PROFILE_USER = r_profile)
        if (nzchar(r_profile)) {
            try_source(r_profile)
        }
        else {
            try_source(".Rprofile") || try_source(file.path("~", 
                ".Rprofile"))
        }
        invisible()
    })
45: eval.parent(substitute(eval(quote(expr), envir)))
44: eval(expr, p)
43: eval(expr, p)
42: eval(quote({
        try_source <- function(file) {
            if (file.exists(file)) {
                source(file)
                TRUE
            } else {
                FALSE
            }
        }
        r_profile <- Sys.getenv("R_PROFILE_USER_OLD")
        Sys.setenv(R_PROFILE_USER_OLD = "", R_PROFILE_USER = r_profile)
        if (nzchar(r_profile)) {
            try_source(r_profile)
        } else {
            try_source(".Rprofile") || try_source(file.path("~", 
                ".Rprofile"))
        }
        invisible()
    }), new.env())
41: eval(quote({
        try_source <- function(file) {
            if (file.exists(file)) {
                source(file)
                TRUE
            } else {
                FALSE
            }
        }
        r_profile <- Sys.getenv("R_PROFILE_USER_OLD")
        Sys.setenv(R_PROFILE_USER_OLD = "", R_PROFILE_USER = r_profile)
        if (nzchar(r_profile)) {
            try_source(r_profile)
        } else {
            try_source(".Rprofile") || try_source(file.path("~", 
                ".Rprofile"))
        }
        invisible()
    }), new.env())
40: try_source(".Rprofile")
39: source(file)
38: withVisible(eval(ei, envir))
37: eval(ei, envir)
36: eval(ei, envir)
35: source("renv/activate.R") at .Rprofile#11
34: withVisible(eval(ei, envir))
33: eval(ei, envir)
32: eval(ei, envir)
31: local(...) at activate.R#2
30: eval.parent(substitute(eval(quote(expr), envir)))
29: eval(expr, p)
28: eval(expr, p)
27: eval(quote(...), new.env())
26: eval(quote(...), new.env())
25: if (renv_bootstrap_load(project, libpath, version))
      return(TRUE) at activate.R#1159
24: renv::load(project) at activate.R#847
23: renv_load_finish(project, lockfile)
22: renv_load_report_synchronized(project, lockfile)
21: (function() {
        renv_scope_options(renv.verbose = FALSE)
        status(project = project, sources = FALSE)
    })()
20: status(project = project, sources = FALSE)
19: renv_status_impl(project, libpaths, lockpath, sources, cache)
18: renv_snapshot_dependencies(project, dev = FALSE)
17: dynamic(list(project = project, type = type, dev = dev), renv_snapshot_dependencies_impl(project, 
        type, dev))
16: the$dynamic_objects[[id]] %||% {
        dlog("dynamic", "memoizing dynamic value for '%s'", id)
        value
    }
15: renv_snapshot_dependencies_impl(project, type, dev)
14: withCallingHandlers(renv_dependencies_impl(path = path, root = project, 
        field = "Package", errors = config$dependency.errors(), dev = dev), 
        renv.dependencies.problems = function(cnd) {
            if (identical(config$dependency.errors(), "ignored")) 
                return()
            if (interactive() && !proceed()) 
                cancel()
        }, renv.dependencies.elapsed_time = function(cnd) {
            if (!type %in% c("packrat", "implicit")) 
                return()
            elapsed <- cnd$data
            limit <- getOption("renv.dependencies.elapsed_time_threshold", 
                default = 10L)
            if (elapsed < limit) 
                return()
            lines <- c("", "NOTE: Dependency discovery took %s during snapshot.", 
                "Consider using .renvignore to ignore files, or switching to explicit snapshots.", 
                "See `?renv::dependencies` for more information.", 
                "")
            writef(lines, renv_difftime_format(elapsed))
        })
13: renv_dependencies_impl(path = path, root = project, field = "Package", 
        errors = config$dependency.errors(), dev = dev)
12: renv_dependencies_discover(files, progress, errors)
11: bapply(paths, renv_dependencies_discover_impl)
10: lapply(x, f, ...)
 9: FUN(X[[i]], ...)
 8: tryCatch(filebacked("dependencies", path, callback), error = function(cnd) {
        warning(cnd)
        NULL
    })
 7: tryCatchList(expr, classes, parentenv, handlers)
 6: tryCatchOne(expr, names, parentenv, handlers[[1L]])
 5: value[[3L]](cond)
 4: warning(cnd)
 3: withRestarts({
        .Internal(.signalCondition(cond, message, call))
        .Internal(.dfltWarn(message, call))
    }, muffleWarning = function() NULL)
 2: withOneRestart(expr, restarts[[1L]])
 1: doWithOneRestart(return(expr), restart)
R version 4.3.1 (2023-06-16) -- "Beagle Scouts"
Platform: x86_64-pc-linux-gnu (64-bit)

@jabenninghoff
Copy link

@kevinushey, I have a reproducible example. I am seeing a similar error when restarting R after upgrading to renv 1.0.0:

Restarting R session...

- Project '~/GitHub/rtraining' loaded. [renv 1.0.0]
Warning messages:
1: In is.na(value) :
  is.na() applied to non-(list or vector) of type 'language'
2: In if (is.na(value)) default else as.logical(value) :
  the condition has length > 1
ℹ Loading rtraining
  • The main branch of this project uses renv 0.17.3 and has no warning messages: https://github.com/jabenninghoff/rtraining
  • The renv-update branch uses renv 1.0.0 and generates the warning message: https://github.com/jabenninghoff/rtraining/tree/renv-update
  • The warnings occur when running renv/activate.R (removing this from .Rprofile eliminates the error).
  • Adding the suggested settings (options(error = renv:::renv_error_handler_call()); options(warn = 2L)) changes the error message but doesn't provide additional detail:
Restarting R session...

- Project '~/GitHub/rtraining' loaded. [renv 1.0.0]
Error in is.na(value) : 
  (converted from warning) (converted from warning) is.na() applied to non-(list or vector) of type 'language'

Interestingly, I performed the upgrade from 0.17.3 to 1.0.0 using the commands:

renv::update("renv")
renv::snapshot()

However, when I try the following I get an error:

> renv::upgrade()
A new version of the renv package will be installed:

# CRAN ===============================
- renv   [0.17.3 -> 1.0.0]

This project will use the newly-installed version of renv.

Do you want to proceed? [y/N]: y
Installing renv [1.0.0] ...
	OK [linked cache in 0.76 milliseconds]
Warning messages:
1: In runHook(".onLoad", env, package.lib, package) :
  internal error -3 in R_decompress1
2: In runHook(".onLoad", env, package.lib, package) :
  internal error -3 in R_decompress1
warning messages from top-level task callback 'renv_sandbox_task'
Warning messages:
1: In runHook(".onLoad", env, package.lib, package) :
  internal error -3 in R_decompress1
2: renv background task 'renv_sandbox_task' failed; it will be stopped 
warning messages from top-level task callback 'renv_snapshot_task'
Warning message:
In runHook(".onLoad", env, package.lib, package) :
  internal error -3 in R_decompress1
Error in runHook(".onLoad", env, package.lib, package) : 
  lazy-load database '/Users/jabenninghoff/Library/Caches/org.R-project.R/R/renv/library/rtraining-be68765c/R-4.3/x86_64-apple-darwin20/renv/R/renv.rdb' is corrupt
In addition: Warning message:
In runHook(".onLoad", env, package.lib, package) :
  internal error -3 in R_decompress1

I've upgraded several of my R packages to renv 1.0.0 with no issue; rtraining is the only one affected - the key difference could be the large number of dependencies in the project.

@JZschache
Copy link

Hi,

I had the same issue after upgrading to 1.0.0.

The following warnings occured whenever I called renv::status() or renv::init():

Warning messages:
1: In is.na(value) :
  is.na() applied to non-(list or vector) of type 'language'
2: In if (is.na(value)) default else as.logical(value) :
  the condition has length > 1

I tracked it down to an Rmd-file with the following chunk using a conditional evaluation:

```{r load_data, eval=!use_cache}
...

(The variable use_cache is defined in a previous chunk.)

I solved this by not using the negation:

```{r load_data, eval=not_use_cache}
...

The warnings disappeared afterwards.

Hope this helps others as well.

@hadley hadley added this to the 1.0.1 milestone Jul 25, 2023
@hadley
Copy link
Member

hadley commented Jul 25, 2023

I think this is coming from truthy() when called inside renv_dependencies_discover_chunks_ignore().

Looks like the problem was caused in 314009b#diff-10360dfb4fa51b737341a4b5e8d5ea9758b1dcd3a9fb923349ee866120191a60 by removal of the is.call() block.

It's probably worth breaking up truthy() into two functions — one can be used for env vars (90% of the existing usage) and the other for parsing knitr options.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants