"$<-" fails (invalid subscript type 'language')
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).
`$<-`(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.