[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