To reply to Yves Gauvreau question (Jan 24, 2001) about how to set values within function, it is possible to do without without using the "<<-" assignment operator or other nasty tricks. I had the same problem and I did a nasty workaround two weeks ago implementing the functionality of reference variables, but today I "ran into" the [R] help page for ".Alias". With .Alias one can immitate call by reference! Here is an example that shows how it works: Foo <- function(value=0) { this <- list( value = value ) class(this) <- "Foo"; return(this); } set <- function(object, value) { this <- .Alias(object); this$value <- value; return (invisible()); } get <- function(object) { return (object$value); } a <- Foo(); b <- Foo(10); cat("a =", get(a), "\n"); # a = 0 cat("b =", get(b), "\n"); # b = 10 set(a, 10); set(b, 20); cat("a =", get(a), "\n"); # a = 10 cat("b =", get(b), "\n"); # b = 20 Have a nice day Henrik Bengtsson PhD Student in Statistics Lund University & UC Berkeley henrikb at braju.com -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
"Henrik Bengtsson" <henrikb at braju.com> writes:> To reply to Yves Gauvreau question (Jan 24, 2001) about how to set values > within function, it is possible to do without without using the "<<-" > assignment operator or other nasty tricks. I had the same problem and I did > a nasty workaround two weeks ago implementing the functionality of reference > variables, but today I "ran into" the [R] help page for ".Alias". With > .Alias one can immitate call by reference! Here is an example that shows how > it works:.....> set <- function(object, value) { > this <- .Alias(object); > this$value <- value; > return (invisible()); > }It may work, but I wouldn't think it is documented to do so and could easily get blown away by an internal change (and *I'm* not going to put checks in to ensure that it keeps working)! If you really must do this kind of thing, try coding along the lines of set<-function(object,value) eval.parent(substitute(object$value<-value)) Or use assign(), or even "<<-", at least that is well-defined. It can't get nastier than .Alias. -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._