Re: [R] S4 pass-by-value work-around?

From: Henrik Bengtsson <>
Date: Thu, 19 Jun 2008 11:08:46 -0700

Quick comment. Use an environment to hold your "fields" and then pass around the environment variable. Any modification to variables inside the environment done from anywhere (inside/outside functions) will be persistent. Then wrap this up in a class structure, overload, say, '$', '[[', '$<-', '[[<-' to get() and assign() to your object and you have the first seed of what is done in R.oo.

Note that '$' are '$<-' indeed available for environments. However, it is not recommended to extend the environment class itself. Instead you should wrap the environment up in a list and work from that. Search the R mailing list archives for issues you would/will face if you inherit from environment.

My $.02

(R.oo author)

On Wed, Jun 18, 2008 at 10:26 PM, Jeffrey Spies <> wrote:
> Howdy all,
> I have a problem that I'd like some advice/help in solving---it has to do
> with R's pass-by-value system. I understand the issue, but am wondering if
> anyone has found a working solution in dealing with it for cases when one
> wants to modify an object inside of a method, specifically when working with
> S4. I'm aware that R.oo is able to deal with this using S3, but I'd really
> rather stick to S4.
> The basics of what I would like to do are coded below:
> setClass("MyMatrix",
> representation(
> parameters="matrix",
> uniqueCount="numeric"
> ),
> prototype(
> parameters=matrix(numeric(0),0,0),
> uniqueCount=1
> )
> )
> setGeneric("createUniqueName", function(object)
> standardGeneric("createUniqueName"))
> setMethod("createUniqueName", "MyMatrix", function(object){
> retval <- paste("unique_", object_at_uniqueCount, sep="")
> object_at_uniqueCount <- object_at_uniqueCount + 1
> return(retval)
> })
> x <- new("MyMatrix", parameters=matrix(0, 2, 2))
> createUniqueName(x) # returns "unique_1"
> x # x_at_uniqueCount is still 1
> I understand why this is happening, but am wondering how people in the
> community have dealt with it, specifically when using S4. Any advice would
> be appreciated. Also, I am aware that this is somewhat of a silly example,
> but it should allow you to see what I'm trying to accomplish.
> Thank you,
> Jeff.
> --
> View this message in context:
> Sent from the R help mailing list archive at
> ______________________________________________
> mailing list
> PLEASE do read the posting guide
> and provide commented, minimal, self-contained, reproducible code.
> mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code. Received on Thu 19 Jun 2008 - 18:58:23 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 19 Jun 2008 - 19:30:46 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive