On 20/01/2016 2:21 PM, Bert Gunter wrote:
Thanks Marc.

Actually, I think the cognate construction for a vector (which is what
a list is also) is:

> vector("numeric",2)[2] <-  3
Error in vector("numeric", 2)[2] <- 3 :
   target of assignment expands to non-language object

but this works:

> "[<-"(vector("numeric",2),2,3)
[1] 0 3

I would have thought the 2 versions should be identical, but as you
allude, there are apparently subtleties in the parsing/evaluation that
I do not understand, so that the explicit functional form is parsed
and evaluated differently than the implicit one. The obvious message,
though, is: don't do this!

I suspect there is a reference to this somewhere in the R Language
definition  or elsewhere, and if so, I would appreciate someone
referring me to it -- RTFM certainly applies!

There's a detailed discussion in the Language Reference. Search for "complex assignment", or look in section 3.4.4 Subset assignment. The big difference between the two expressions you give is in the final assignment of the result of the "[<-" function to the referenced variable. In your first case there's no referenced variable, just an expression vector("numeric",2), so you get the error, just as you would with

vector("numeric",2) <- c(0, 3)

Duncan Murdoch

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to