Skip to content

issue with promises for time parameter of rep()

3 messages · Homer White, Lionel Henry, Luke Tierney

#
Greetings,

The following is based on a question I raised on Stackoverflow:

https://stackoverflow.com/questions/46280120/calling-printls-str-in-function-affect-behavior-of-rep/46283979#46283979

Start a new R session with an empty Global Env.  Then define:

f <- function(n) {
  print(ls.str())
  rep("hello", times = n)
}

Now run:

f(x)

Instead of getting the expected "object 'x' not found" error, you get:

n : <missing>[1] "hello"

It was suggested that I file the issue here as a possible bug.


Regards,

Homer
#
Here is the same issue with closures:

    g <- function(n) {
      missing(n)
    }
    f <- function(n, force) {
      if (force) {
        tryCatch(n, error = function(...) NULL)
      }
      g(n)
    }

    g(`_x`)
    #> [1] FALSE

    f(`_x`, force = FALSE)
    #> [1] FALSE

    f(`_x`, force = TRUE)
    #> [1] TRUE

Lionel
#
Thanks. Fixed in R-devel and R-patched. This now gives

f <- function(n) {
     print(ls.str())
     rep("hello", times = n)
}
f(n)
## n : <missing>
## Error in f(n) : object 'n' not found
## In addition: Warning message:
## In f(n) : restarting interrupted promise evaluation

Best,

luke
On Mon, 18 Sep 2017, Homer White wrote: