[Rd] "$<-" fails (invalid subscript type 'language')

Vitalie S. spinuvit.list at gmail.com
Sun Oct 24 22:21:42 CEST 2010


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.



More information about the R-devel mailing list