Hi, I've been playing around with formals() and stumbled upon some behaviour which surprised me: a <- alist(x=) .Internal(inspect(a$x)) # @55b0ebae67b0 01 SYMSXP g0c0 [MARK,REF(5761)] "" (has value) x <- a$x .Internal(inspect(x)) # Error: argument "x" is missing, with no default missing(x) [1] TRUE Apparently, the elements corresponding to formal arguments without a default value can be passed to functions as arguments (and look like empty symbols, which can't be created by as.symbol()), but when assigned to a variable, they turn missing and can't be accessed. How can I safely detect and work with such values? -- Best regards, Ivan
iuke-tier@ey m@iii@g oii uiow@@edu
2022-May-02 20:07 UTC
[R] [External] alist() and missing variables
On Mon, 2 May 2022, Ivan Krylov wrote:> Hi, > > I've been playing around with formals() and stumbled upon some > behaviour which surprised me: > > a <- alist(x=) > .Internal(inspect(a$x)) > # @55b0ebae67b0 01 SYMSXP g0c0 [MARK,REF(5761)] "" (has value) > x <- a$x > .Internal(inspect(x)) > # Error: argument "x" is missing, with no default > missing(x) > [1] TRUE > > Apparently, the elements corresponding to formal arguments without a > default value can be passed to functions as arguments (and look like > empty symbols, which can't be created by as.symbol()), but when > assigned to a variable, they turn missing and can't be accessed. > > How can I safely detect and work with such values?You can detect them as you did here using missing(). This is what the byte code compiler implementation does. [homepage.stat.uiowa.edu/~luke/R/compiler/compiler.pdf] It's not ideal but it's what we have and not likely to change any time soon. Best, luke> >-- Luke Tierney Ralph E. Wareham Professor of Mathematical Sciences University of Iowa Phone: 319-335-3386 Department of Statistics and Fax: 319-335-3017 Actuarial Science 241 Schaeffer Hall email: luke-tierney at uiowa.edu Iowa City, IA 52242 WWW: stat.uiowa.edu