On Oct 25, 2010, at 3:51 AM, Vitalie S. wrote: > 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. >
Nope, you're passing different arguments - to make them equivalent you have to use `$<-`(tl, `tv[[1]]`, "sdfdsfdsfsd") which works -- you need to quote the symbol in both cases not just one ;). Cheers, Simon > 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