Wacek Kusnierczyk wrote: > Stavros Macrakis wrote: > > >> There is no equivalent to set-car!/rplaca (not even pairlists and >> expressions). For example, r<-pairlist(1,2); r[[1]]<-r does not create a >> circular list. And in general there doesn't seem to be substructure sharing >> at the semantic level (though there may be in the implementation). >> >> > > computations on environment objects seem not to be subject to the > copy-value-on-assignment semantics: > > e <- new.env(parent=emptyenv()) > ee <- e > e$a <- 0 > ee$a > > >
there's actually more to environments than that. the issue is, you can make a function that returns an environment disguised as an object of some custom class, and it will behave like an environment rather than according to the assign-to-copy way. the issue is, unless you know whether the object is an environment or not, you cannot tell what happen in code like the following: result = foo(<some args>) result$a # 0, say copy = result result$a = 1 result$a # 1 copy$a # ?? copy$b = 1 copy$b # 1 result$b # ?? as a concrete example, take base::srcfile. it returns an environment tagged with "srcfile": sf = srcfile("rubbish") sf$filename # rubbish sfcopy = sf sfcopy$filename = "hello dolly" sf$filename # hello dolly the man page makes no effort to make you know, it does not mention environments at all: "The 'srcfile' function produces an object of class 'srcfile', which contains the name and directory of a source code file, along with its timestamp, for use in source level debugging (not yet implemented) and source echoing." you'd have to pay attention to check yourself: is(sf) # oops, "srcfile", but not "environment" is.environment(sf) # TRUE or maybe investigate the source code of the function (where available): srcfile # ... e <- new.env(...) # ... # class(e) <- "srcfile" # return(e) the point is, you'd better not make assumptions about how your code will perform unless you check what the return values from the functions you use really are, because it has impact on how assignments are made. vQ ______________________________________________ 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.