[Rd] SOLVED: Re: Standard non-standard evaluation problem with 2.10-0

Gavin Simpson gavin.simpson at ucl.ac.uk
Tue Nov 3 21:36:22 CET 2009


Dear list,

Prof Ripley has replied with the solution - I /was/ doing something
patently stupid.

The offending line:

mf[[names(dots)]] <- NULL

should have been

mf[names(dots)] <- NULL

That the offending line worked in R 2.9.x was the result of bug, which
has been fixed in the current version, and it was my mistake in using
'[[' where I meant '['.

All the best,

Gavin

On Tue, 2009-11-03 at 20:05 +0000, Gavin Simpson wrote:
> Dear List
> 
> I am getting an error when checking my analogue package with
> R2.10.0-patched. The error comes when running a function within which I
> use the standard non-standard evaluation method. I've distilled the
> error and functions involved out into the following simple example to
> illustrate the error:
> 
> ## Dummy data to illustrate formula method
> d <- data.frame(A = runif(10), B = runif(10), C = runif(10))
> ## simulate some missings
> d[sample(10,3), 1] <- NA
> 
> foo <- function(formula, data = NULL,
>                 subset = NULL,
>                 na.action = na.pass, ...) {
>     mf <- match.call()
>     mf[[1]] <- as.name("model.frame")
>     mt <- terms(formula, data = data, simplify = TRUE)
>     mf[[2]] <- formula(mt, data = data)
>     mf$na.action <- substitute(na.action)
>     dots <- list(...)
>     mf[[names(dots)]] <- NULL
>     mf <- eval(mf,parent.frame())
>     mf
> }
> 
> ## apply foo using formula
> foo(~ . - B, data = d, na.action = na.pass,
>     method = "missing", na.value = 0)
> Error in mf[[names(dots)]] <- NULL : 
>   more elements supplied than there are to replace
> 
> If I debug(foo) and do:
> 
> Browse[2]> names(dots)
> [1] "method"   "na.value"
> Browse[2]> names(mf)
> [1] ""          "formula"   "data"      "na.action" "method"   
> [6] "na.value"
> Browse[2]> mf[[names(dots)[1]]]
> [1] "missing"
> Browse[2]> mf[[names(dots)[2]]]
> [1] 0
> 
> But
> Browse[2]> mf[[names(dots)]]
> Error in mf[[names(dots)]] : subscript out of bounds
> Browse[2]> str(names(dots))
>  chr [1:2] "method" "na.value"
> 
> I could have sworn I tested this during the beta test phase for 2.10.0 -
> if I did I didn't get any errors at that time - and this code works fine
> under R2.9.x branch. The package is now failing checks on CRAN and on my
> local install.
> 
> Am I doing something patently stupid here? Has something changed in '[['
> or 'names' that I'm now running foul of? I can probably work round this
> by setting the individual names of 'mf' to NULL in two calls, but I'd
> like to get to the bottom of the problem if at all possible.
> 
> Session Info:
> R version 2.10.0 Patched (2009-11-01 r50276) 
> i686-pc-linux-gnu 
> 
> locale:
>  [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C              
>  [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
>  [5] LC_MONETARY=C              LC_MESSAGES=en_GB.UTF-8   
>  [7] LC_PAPER=en_GB.UTF-8       LC_NAME=C                 
>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
> [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       
> 
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods  
> [7] base     
> 
> other attached packages:
> [1] analogue_0.6-21 MASS_7.2-48     lattice_0.17-25
> [4] vegan_1.15-3   
> 
> loaded via a namespace (and not attached):
> [1] grid_2.10.0  tools_2.10.0
> 
> Thanks in advance,
> 
> G
-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



More information about the R-devel mailing list