Gabor Grothendieck <ggrothendieck <at> myway.com> writes: : : Eric Lecoutre <lecoutre <at> stat.ucl.ac.be> writes: : : : : : Hi, : : : : If I define the following list: : : : : > (l<-list("text-align"="right")) : : $"text-align" : : [1] "right" : : : : I know that I can't use l$text-align, as the parser will find a '-' : operation. : : If I want (need) to use special names, as "text-align", I have to enclose : : it between "". So I can use: : : : : l$"text-align" or l[["text-align"]] : : : : If now I have the text "text-align" defined in a variable: : : p<-"text-align" : : : : I can use: : : > l[[p]] : : [1] "right" : : : : But I can't use l$p : : : : where as it is said in the help page that 'x$name' is equivalent to : : 'x[["name"]]'. : : : : Anyway I will use "[[" but I dont clearly understand this behavior. : : [[ evaluates its right argument and $ does not. The "..." notation is : just to allow one to specify non-syntactic arguments. One could : alternately use l$`text-align` . I think the "..." notation : is a holdover from before `...` was implemented. : : Its also possible to define your own class and have $ operate any : way you like on it (although its probably best to stick with : standard behavior and the following is not really recommended): : : l<-list("text-align"="right", a=2) : class(l) <- c("mylist", "list") : "$.mylist" <- function(x, idx) { : y <- x[[idx]] : if (is.null(y)) x[[eval.parent(parse(text=idx))]] else y : } : p <- "text-align" : l$p # "right" : l$"text-align" # same : l$`text-align` # same : a <- 99 : l$a # 2 : l$"a" # same : l$`a` # same : l[["a"]] # same : l[[a]] # 99
The comment on the last one is wrong. It should give an error since there is no 99th component to l. ______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel