"$<-" fails (invalid subscript type 'language')
Simon Urbanek <simon.urbanek at r-project.org> writes:
On Oct 24, 2010, at 4:21 PM, Vitalie S. wrote:
David Winsemius <dwinsemius at comcast.net> writes:
On Oct 24, 2010, at 5:35 AM, Vitalie S. wrote:
This might be just beyond of my understanding of how assignment works in R, but the documentation does not say anything about:
tv <- c(a="dsf", b="sss") tl <- list(232) `$<-`(tl, tv[[1]], "sdfdsfdsfsd")
Error: invalid subscript type 'language'
Are either of these what you should have done to get what it appears you were aiming for but didn't specify?
I meant what I wrote there. After the assignment, the list tl should have element 'dsf' with the value "sdfdsfdsfsd" (sorry for bad names).
No, as David pointed out the documentation tells you unmistakably: "[...] The main difference is that ?$? does not allow computed indices [...]" so you want to use `[[` instead since `$` is defined exactly to not allow just what you're doing: the index argument must be a symbol or a character vector of length one - anything else is an error as you see.
Oh, that was really stupid from my part. I meant that functionality for my specific class, not for lists of course. For list I would expect, `$<-`(tl, tv[[1]], "sdfdsfdsfsd") tl$`tv[[1]]` <- "sdfdsfdsfsd" to give the same result. I just gave this artificial example with lists to illustrate the error. Didn't want to bring the definition of my classes here. Vitalie.
Cheers, Simon
`$<-`(tl, "sdfdsfdsfsd", tv[[1]]) # yields [[1]] [1] 232 $sdfdsfdsfsd [1] "dsf"
`[<-`(tl, tv[[1]], "sdfdsfdsfsd")
[[1]] [1] 232 $dsf [1] "sdfdsfdsfsd" The "$" operator does not evaluate the index whereas the "[" function does. And the documentation is quite clear about that distinction.
If it is evaluated or not it is hardly an explanation for the error. It throws
the error before the method is even dispatched. If the index (in $'s case the
name) is unevaluated then my methods should get an expression 'tv[[1]]', which I
can then handle.
Example:
setClass("classX", contains="list")
setMethod("$<-", "classX",
function(x, name, value){
print("I am here!!")
x
})
x <- new("classX")
tv <- c("aa", "bb")
`$<-`(x, tv[[1]], 4343)
#gives
Error: invalid subscript type 'language'
-- David Winsemius.
This happens even before the method is dispatched. I can not handle the "name" argument in my S4 method, because it's not even entered. Thanks, Vitalie.
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel>