[R] Lexical Scoping: eval(expr,envir=)
Duncan Murdoch
murdoch at stats.uwo.ca
Thu Nov 18 15:12:19 CET 2004
On Thu, 18 Nov 2004 12:05:34 +0100, Eric Lecoutre
<lecoutre at stat.ucl.ac.be> wrote :
>
>Hi R-listers,
>
>I am trying to better undertand what we would call "functional paradigm"
>use of S/R to better map my programming activities in other languages.
>
>This little function is aimed to create an object (at the end end, it would
>have it's own class):
>
>--
> myObject =function(){
> list(
> a=1,
> foo=function(b)
> {
> cat("b:",b)
> cat("\na:", a)
> }
> )
> }
>--
>To my minds, "a" would be a property of the object and "foo" one of it's
>method.
To work with lexical scoping, you could do it as
myObject <- function(){
a <- 1
list(
a=function() a,
"a<-" = function(x, value) a <<- value,
foo=function(b)
{
cat("b:",b,"\n")
cat("a:", a,"\n")
}
)
}
Then you can access the a property pretty easily, but changing it is
really ugly:
> m <- myObject()
> m$a()
[1] 1
> m$foo()
Error in cat("b:", b, "\n") : Argument "b" is missing, with no default
> m$foo(1)
b: 1
a: 1
> (m$"a<-")(m, 4)
> m$foo(1)
b: 1
a: 4
It would be slightly nicer (but still ugly) if this worked:
> (m$a)(m) <- 4
Error: invalid function in complex assignment
but it doesn't.
Duncan Murdoch
More information about the R-help
mailing list