Basically, I see two options here: 1) Using environments
# Temp environment env <- new.env(parent=emptyenv()) env$state1 <- list(n=100, won=0) env$state2 <- list(n=100, won=0) fight2 <- function(stateA, stateB, envir){ # get(stateA, envir=envir)$n <- 50 # The above is what you would want to do, but # 'get<-' is not defined, so: temp <- get(stateA, envir=envir) temp$n <- 50 assign(stateA, value=temp, envir=envir) # Same for stateB temp <- get(stateB, envir=envir) temp$n <- 50 assign(stateA, value=temp, envir=envir) return(TRUE) } fight2(stateA="state1", stateB="state2", envir=env) # Extract from environment state1 <- env$state1 state1 state2 <- env$state2 state2 2) Using Reference Classes # Class Def setRefClass("State", fields=list(n="numeric", won="numeric"), methods=list( fight2=function(...){ fight2Ref(.self=.self, ...) } ) ) # Set Generic setGeneric(name="fight2Ref", signature=".self", def=function(.self, ...) standardGeneric("fight2Ref")) # Set Method setMethod(f="fight2Ref", signature="State", definition=function( .self, value, ... ){ .self$n <- value } ) # Note: # You could also put the code inside 'fight2Ref' directly inside the class def, # but I don't want them to be too crowded, so I go by 'divide and conquer' # Instantiate objects state1 <- new("State", n=100, won=0) state1 state2 <- new("State", n=100, won=0) state2 # Apply method state1$fight2(value=50) state1 state2$fight2(value=50) state2 # Back to list stateToList <- function(obj, ...){ fields <- names(getRefClass("State")$fields()) out <- lapply(fields, function(x.field){ obj$field(x.field) }) names(out) <- fields return(out) } state1 <- stateToList(state1) state1 state2 <- stateToList(state2) state2 HTH, Janko On 06.12.2011 22:06, R. Michael Weylandt wrote: > No pointer functionality in R (that I know of), but if you want to > return two objects as one the standard way is to put them in a list > and to return that list. > > Michael > > On Tue, Dec 6, 2011 at 2:35 PM, Yev<kirp...@gmail.com> wrote: >> I'm trying to write a function that takes several objects with many >> different attributes and then changes their attributes. So what I wanted to >> happen in the simplified example below is for the function to change the >> attributes of the objects state1 and state2 that are passed to it. But >> because stateA and stateB are local, this isn't working. Are there any easy >> solutions? >> >> e.g., if I could combine the two objects stateA and stateB into a single >> object, I could return it and then assign it back to objects state1 and >> state2. Or if I could pass a pointer to the original object.. But I cannot >> find an easy way of doing either. Thanks in advance.. >> >> state1<- list(n=100, won=0) >> state2<- list(n=100, won=0) >> >> fight2<- function(stateA, stateB){ >> stateA$n<- 50 >> stateB$n<-50 >> } >> >> fight2(state1,state2) >> >> state1$n >> state2$n >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > -- ------------------------------------------------------------------------ *Janko Thyson* janko.thy...@ku-eichstaett.de <mailto:janko.thy...@ku-eichstaett.de> Catholic University of Eichstätt-Ingolstadt Ingolstadt School of Management Statistics and Quantitative Methods Auf der Schanz 49 D-85049 Ingolstadt www.wfi.edu/lsqm <http://www.wfi.edu/lsqm> Fon: +49 841 937-1923 Fax: +49 841 937-1965 This e-mail and any attachment is for authorized use by the intended recipient(s) only. It may contain proprietary material, confidential information and/or be subject to legal privilege. It should not be copied, disclosed to, retained or used by any other party. If you are not an intended recipient then please promptly delete this e-mail and any attachment and all copies and inform the sender. [[alternative HTML version deleted]]
______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.