Simon Urbanek <simon.urba...@r-project.org> writes: > On Oct 24, 2010, at 4:21 PM, Vitalie S. wrote: > >> David Winsemius <dwinsem...@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@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel> >> ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel