Re: [R] Force evaluation of a symbol when a function is created

2012-08-07 Thread Duncan Murdoch
Here's one more way.  It seems to me this is the most R-like way to do 
what you want:


  multiply_by_Y - function(Y) {
force(Y)
function(x) x*Y
  }

  F - multiply_by_Y(3)

The force call forces Y to be evaluated at that point, so its value is 
fixed from that point forward.


Duncan Murdoch

On 12-08-06 5:07 PM, Schoenfeld, David Alan,Ph.D.,Biostatistics wrote:


I am porting a program in matlab to R,
The problem is that Matlab has a feature where symbols that aren't arguments 
are evaluated immediately.
That is:
Y=3
F=@(x) x*Y

Will yield a function such that F(2)=6.
If later say. Y=4 then F(2) will still equal 6.

R on the other hand has lazy evaluation.
F-function(x){x*Y}
Will do the following
Y=3
F(2)=6
Y=4
F(2)=8.
Does anyone know of away to defeat lazy evaluation in R so that I can easily 
simulate the Matlab behavior.  I know that I can live without this in ordinary 
programming but it would make my port much easier.

Thanks.




The information in this e-mail is intended only for the ...{{dropped:14}}

__
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.



__
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.


Re: [R] Force evaluation of a symbol when a function is created

2012-08-07 Thread Bert Gunter
Duncan, et.al:

Many thanks: let the closure do the work automatically rather than
manually manipulating it.

However, in the spirit of the OP's original request, I believe the
call would be:

Y - 3  ## That is, Y gets a value at some prior point, perhaps 
programmatically.
   F - multiply_by_Y(Y) # ... F picks up this value implicitly -- no need 
 for explicit assignment.

But then there is no need for force(), is there?

 fy - function(Y)function(x) x*Y
 Y - 2
 F - fy(Y)
 F(5)
[1] 10
 Y - 3
 F(5)
[1] 10
 G - fy(Y)
 G(5)
[1] 15

That is, one simply relies on lexical scoping/closures to retain the
value of  Y used as a free variable in  function(x)x*Y when it is
defined. No need to explicitly force() it. If wrong, I would be
grateful for correction. This appears to me to duplicate the Matlab
behavior rather closely.


-- Bert

On Tue, Aug 7, 2012 at 3:48 AM, Duncan Murdoch murdoch.dun...@gmail.com wrote:
 Here's one more way.  It seems to me this is the most R-like way to do what
 you want:

   multiply_by_Y - function(Y) {
 force(Y)
 function(x) x*Y
   }

   F - multiply_by_Y(3)

 The force call forces Y to be evaluated at that point, so its value is
 fixed from that point forward.

 Duncan Murdoch

 On 12-08-06 5:07 PM, Schoenfeld, David Alan,Ph.D.,Biostatistics wrote:


 I am porting a program in matlab to R,
 The problem is that Matlab has a feature where symbols that aren't
 arguments are evaluated immediately.
 That is:
 Y=3
 F=@(x) x*Y

 Will yield a function such that F(2)=6.
 If later say. Y=4 then F(2) will still equal 6.

 R on the other hand has lazy evaluation.
 F-function(x){x*Y}
 Will do the following
 Y=3
 F(2)=6
 Y=4
 F(2)=8.
 Does anyone know of away to defeat lazy evaluation in R so that I can
 easily simulate the Matlab behavior.  I know that I can live without this in
 ordinary programming but it would make my port much easier.

 Thanks.




 The information in this e-mail is intended only for the ...{{dropped:14}}

 __
 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.


 __
 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.



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm

__
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.


Re: [R] Force evaluation of a symbol when a function is created

2012-08-07 Thread Duncan Murdoch

On 12-08-07 10:46 AM, Bert Gunter wrote:

Duncan, et.al:

Many thanks: let the closure do the work automatically rather than
manually manipulating it.

However, in the spirit of the OP's original request, I believe the
call would be:


Y - 3  ## That is, Y gets a value at some prior point, perhaps 
programmatically.
   F - multiply_by_Y(Y) # ... F picks up this value implicitly -- no need 
for explicit assignment.


But then there is no need for force(), is there?


You still need force:

fy - function(Y)function(x) x*Y
Y - 2
F - fy(Y)
Y - 3
F(5)

This will print 15, because F only contains a promise to evaluate Y, it 
hasn't been evaluated until the very last line, and by that time Y has 
been changed to 3.


If you are going to construct functions in functions, and their results 
depend on the arguments to the constructor, then it's almost always a 
good idea to force the arguments.  Sometimes it isn't necessary (the 
value will be forced implicitly), and in some rare circumstances you 
might want to capture the promise instead of its value, but it's 
generally a good idea.  It is a fairly cheap operation.


Duncan Murdoch




fy - function(Y)function(x) x*Y
Y - 2
F - fy(Y)
F(5)

[1] 10

Y - 3
F(5)

[1] 10

G - fy(Y)
G(5)

[1] 15

That is, one simply relies on lexical scoping/closures to retain the
value of  Y used as a free variable in  function(x)x*Y when it is
defined. No need to explicitly force() it. If wrong, I would be
grateful for correction. This appears to me to duplicate the Matlab
behavior rather closely.


-- Bert

On Tue, Aug 7, 2012 at 3:48 AM, Duncan Murdoch murdoch.dun...@gmail.com wrote:

Here's one more way.  It seems to me this is the most R-like way to do what
you want:

   multiply_by_Y - function(Y) {
 force(Y)
 function(x) x*Y
   }

   F - multiply_by_Y(3)

The force call forces Y to be evaluated at that point, so its value is
fixed from that point forward.

Duncan Murdoch

On 12-08-06 5:07 PM, Schoenfeld, David Alan,Ph.D.,Biostatistics wrote:



I am porting a program in matlab to R,
The problem is that Matlab has a feature where symbols that aren't
arguments are evaluated immediately.
That is:
Y=3
F=@(x) x*Y

Will yield a function such that F(2)=6.
If later say. Y=4 then F(2) will still equal 6.

R on the other hand has lazy evaluation.
F-function(x){x*Y}
Will do the following
Y=3
F(2)=6
Y=4
F(2)=8.
Does anyone know of away to defeat lazy evaluation in R so that I can
easily simulate the Matlab behavior.  I know that I can live without this in
ordinary programming but it would make my port much easier.

Thanks.




The information in this e-mail is intended only for the ...{{dropped:14}}

__
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.



__
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.






__
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.


Re: [R] Force evaluation of a symbol when a function is created

2012-08-07 Thread Bert Gunter
Thanks Duncan. That clarifies it!

-- Bert

On Tue, Aug 7, 2012 at 12:28 PM, Duncan Murdoch
murdoch.dun...@gmail.com wrote:
 On 12-08-07 10:46 AM, Bert Gunter wrote:

 Duncan, et.al:

 Many thanks: let the closure do the work automatically rather than
 manually manipulating it.

 However, in the spirit of the OP's original request, I believe the
 call would be:

 Y - 3  ## That is, Y gets a value at some prior point, perhaps
 programmatically.
F - multiply_by_Y(Y) # ... F picks up this value implicitly -- no
 need for explicit assignment.


 But then there is no need for force(), is there?


 You still need force:

 fy - function(Y)function(x) x*Y
 Y - 2
 F - fy(Y)
 Y - 3
 F(5)

 This will print 15, because F only contains a promise to evaluate Y, it
 hasn't been evaluated until the very last line, and by that time Y has been
 changed to 3.

 If you are going to construct functions in functions, and their results
 depend on the arguments to the constructor, then it's almost always a good
 idea to force the arguments.  Sometimes it isn't necessary (the value will
 be forced implicitly), and in some rare circumstances you might want to
 capture the promise instead of its value, but it's generally a good idea.
 It is a fairly cheap operation.

 Duncan Murdoch


 fy - function(Y)function(x) x*Y
 Y - 2
 F - fy(Y)
 F(5)

 [1] 10

 Y - 3
 F(5)

 [1] 10

 G - fy(Y)
 G(5)

 [1] 15

 That is, one simply relies on lexical scoping/closures to retain the
 value of  Y used as a free variable in  function(x)x*Y when it is
 defined. No need to explicitly force() it. If wrong, I would be
 grateful for correction. This appears to me to duplicate the Matlab
 behavior rather closely.


 -- Bert

 On Tue, Aug 7, 2012 at 3:48 AM, Duncan Murdoch murdoch.dun...@gmail.com
 wrote:

 Here's one more way.  It seems to me this is the most R-like way to do
 what
 you want:

multiply_by_Y - function(Y) {
  force(Y)
  function(x) x*Y
}

F - multiply_by_Y(3)

 The force call forces Y to be evaluated at that point, so its value is
 fixed from that point forward.

 Duncan Murdoch

 On 12-08-06 5:07 PM, Schoenfeld, David Alan,Ph.D.,Biostatistics wrote:



 I am porting a program in matlab to R,
 The problem is that Matlab has a feature where symbols that aren't
 arguments are evaluated immediately.
 That is:
 Y=3
 F=@(x) x*Y

 Will yield a function such that F(2)=6.
 If later say. Y=4 then F(2) will still equal 6.

 R on the other hand has lazy evaluation.
 F-function(x){x*Y}
 Will do the following
 Y=3
 F(2)=6
 Y=4
 F(2)=8.
 Does anyone know of away to defeat lazy evaluation in R so that I can
 easily simulate the Matlab behavior.  I know that I can live without
 this in
 ordinary programming but it would make my port much easier.

 Thanks.




 The information in this e-mail is intended only for the
 ...{{dropped:14}}

 __
 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.


 __
 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.








-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm

__
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.


[R] Force evaluation of a symbol when a function is created

2012-08-06 Thread Schoenfeld, David Alan,Ph.D.,Biostatistics

I am porting a program in matlab to R,
The problem is that Matlab has a feature where symbols that aren't arguments 
are evaluated immediately.
That is:
Y=3
F=@(x) x*Y

Will yield a function such that F(2)=6.
If later say. Y=4 then F(2) will still equal 6.

R on the other hand has lazy evaluation.
F-function(x){x*Y}
Will do the following
Y=3
F(2)=6
Y=4
F(2)=8.
Does anyone know of away to defeat lazy evaluation in R so that I can easily 
simulate the Matlab behavior.  I know that I can live without this in ordinary 
programming but it would make my port much easier.

Thanks.




The information in this e-mail is intended only for the ...{{dropped:14}}

__
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.


Re: [R] Force evaluation of a symbol when a function is created

2012-08-06 Thread William Dunlap
You could use local(), as in
F - local({
   +Y - 3
   +function(x) x * Y
   +})
   F(7)
   [1] 21
Y - 19
F(5)
  [1] 15

Look into 'environments' for more.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


 -Original Message-
 From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
 Behalf
 Of Schoenfeld, David Alan,Ph.D.,Biostatistics
 Sent: Monday, August 06, 2012 2:08 PM
 To: 'r-help@r-project.org'
 Subject: [R] Force evaluation of a symbol when a function is created
 
 
 I am porting a program in matlab to R,
 The problem is that Matlab has a feature where symbols that aren't arguments 
 are
 evaluated immediately.
 That is:
 Y=3
 F=@(x) x*Y
 
 Will yield a function such that F(2)=6.
 If later say. Y=4 then F(2) will still equal 6.
 
 R on the other hand has lazy evaluation.
 F-function(x){x*Y}
 Will do the following
 Y=3
 F(2)=6
 Y=4
 F(2)=8.
 Does anyone know of away to defeat lazy evaluation in R so that I can easily 
 simulate the
 Matlab behavior.  I know that I can live without this in ordinary programming 
 but it would
 make my port much easier.
 
 Thanks.
 
 
 
 
 The information in this e-mail is intended only for the ...{{dropped:14}}
 
 __
 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.

__
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.


Re: [R] Force evaluation of a symbol when a function is created

2012-08-06 Thread Bert Gunter
Thanks to both: Cute question, clever, informative answer.

However, Bill, I don't think you **quite** answered him, although the
modification needed is completely trivial. Of course, I could never
have figured it out without your response.

Anyway, I interpret the question as asking for the function definition
to _implicitly_ pick up the value of Y at the time the function is
defined, rather than explicitly assigning it in local(). The following
are two essentially identical approaches: I prefer the second, because
it's more transparent to me, but that's just a matter of taste.

Y - 3
F -local({y - Y;function(x)x*y})
G - evalq(function(x)x*y,env=list(y=Y))

Yielding:

 Y - 3
 F -local({y - Y;function(x)x*y})
 G - evalq(function(x)x*y,env=list(y=Y))
 F(5)
[1] 15
 G(5)
[1] 15
 Y - 2
 F(5)
[1] 15
 G(5)
[1] 15
 F -local({y - Y;function(x)x*y})
 G - evalq(function(x)x*y,env=list(y=Y))
 F(5)
[1] 10
 G(5)
[1] 10

Cheers,
Bert

On Mon, Aug 6, 2012 at 2:24 PM, William Dunlap wdun...@tibco.com wrote:
 You could use local(), as in
 F - local({
+Y - 3
+function(x) x * Y
+})
F(7)
[1] 21
 Y - 19
 F(5)
   [1] 15

 Look into 'environments' for more.

 Bill Dunlap
 Spotfire, TIBCO Software
 wdunlap tibco.com


 -Original Message-
 From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
 Behalf
 Of Schoenfeld, David Alan,Ph.D.,Biostatistics
 Sent: Monday, August 06, 2012 2:08 PM
 To: 'r-help@r-project.org'
 Subject: [R] Force evaluation of a symbol when a function is created


 I am porting a program in matlab to R,
 The problem is that Matlab has a feature where symbols that aren't arguments 
 are
 evaluated immediately.
 That is:
 Y=3
 F=@(x) x*Y

 Will yield a function such that F(2)=6.
 If later say. Y=4 then F(2) will still equal 6.

 R on the other hand has lazy evaluation.
 F-function(x){x*Y}
 Will do the following
 Y=3
 F(2)=6
 Y=4
 F(2)=8.
 Does anyone know of away to defeat lazy evaluation in R so that I can easily 
 simulate the
 Matlab behavior.  I know that I can live without this in ordinary 
 programming but it would
 make my port much easier.

 Thanks.




 The information in this e-mail is intended only for t...{{dropped:26}}

__
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.


Re: [R] Force evaluation of a symbol when a function is created

2012-08-06 Thread William Dunlap
Both of those approaches require the function to be created
at the same time that the environment containing some of its
bindings is created.  You can also take an existing function and
assign a new environment to it.  E.g.,

   f - function(x) y * x
   ys - c(2,3,5,7,11)
   fs - lapply(ys, function(y) {
  env - new.env(parent=baseenv());
  env[[y]] - y ;
  environment(f) - env ; f })
   # fs is a list of functions, all identical except for their environments, 
which contain 'y'.
   fs[[2]]
  function (x) 
  y * x
  environment: 0x05df1c38
   fs[[2]](10)
  [1] 30
   fs[[3]]
  function (x) 
  y * x
  environment: 0x05def8c0
   fs[[3]](10)
  [1] 50

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


 -Original Message-
 From: Bert Gunter [mailto:gunter.ber...@gene.com]
 Sent: Monday, August 06, 2012 3:03 PM
 To: William Dunlap
 Cc: Schoenfeld, David Alan,Ph.D.,Biostatistics; r-help@r-project.org
 Subject: Re: [R] Force evaluation of a symbol when a function is created
 
 Thanks to both: Cute question, clever, informative answer.
 
 However, Bill, I don't think you **quite** answered him, although the
 modification needed is completely trivial. Of course, I could never
 have figured it out without your response.
 
 Anyway, I interpret the question as asking for the function definition
 to _implicitly_ pick up the value of Y at the time the function is
 defined, rather than explicitly assigning it in local(). The following
 are two essentially identical approaches: I prefer the second, because
 it's more transparent to me, but that's just a matter of taste.
 
 Y - 3
 F -local({y - Y;function(x)x*y})
 G - evalq(function(x)x*y,env=list(y=Y))
 
 Yielding:
 
  Y - 3
  F -local({y - Y;function(x)x*y})
  G - evalq(function(x)x*y,env=list(y=Y))
  F(5)
 [1] 15
  G(5)
 [1] 15
  Y - 2
  F(5)
 [1] 15
  G(5)
 [1] 15
  F -local({y - Y;function(x)x*y})
  G - evalq(function(x)x*y,env=list(y=Y))
  F(5)
 [1] 10
  G(5)
 [1] 10
 
 Cheers,
 Bert
 
 On Mon, Aug 6, 2012 at 2:24 PM, William Dunlap wdun...@tibco.com wrote:
  You could use local(), as in
  F - local({
 +Y - 3
 +function(x) x * Y
 +})
 F(7)
 [1] 21
  Y - 19
  F(5)
[1] 15
 
  Look into 'environments' for more.
 
  Bill Dunlap
  Spotfire, TIBCO Software
  wdunlap tibco.com
 
 
  -Original Message-
  From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On
 Behalf
  Of Schoenfeld, David Alan,Ph.D.,Biostatistics
  Sent: Monday, August 06, 2012 2:08 PM
  To: 'r-help@r-project.org'
  Subject: [R] Force evaluation of a symbol when a function is created
 
 
  I am porting a program in matlab to R,
  The problem is that Matlab has a feature where symbols that aren't 
  arguments are
  evaluated immediately.
  That is:
  Y=3
  F=@(x) x*Y
 
  Will yield a function such that F(2)=6.
  If later say. Y=4 then F(2) will still equal 6.
 
  R on the other hand has lazy evaluation.
  F-function(x){x*Y}
  Will do the following
  Y=3
  F(2)=6
  Y=4
  F(2)=8.
  Does anyone know of away to defeat lazy evaluation in R so that I can 
  easily simulate
 the
  Matlab behavior.  I know that I can live without this in ordinary 
  programming but it
 would
  make my port much easier.
 
  Thanks.
 
 
 
 
  The information in this e-mail is intended only for the ...{{dropped:14}}
 
  __
  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.
 
  __
  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.
 
 
 
 --
 
 Bert Gunter
 Genentech Nonclinical Biostatistics
 
 Internal Contact Info:
 Phone: 467-7374
 Website:
 http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-
 biostatistics/pdb-ncb-home.htm
__
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.


Re: [R] Force evaluation of a symbol when a function is created

2012-08-06 Thread Schoenfeld, David Alan,Ph.D.,Biostatistics
Thank you both, this was very helpful.  I need to study environments more. Do 
either of you know a good source?
 

-Original Message-
From: Bert Gunter [mailto:gunter.ber...@gene.com] 
Sent: Monday, August 06, 2012 6:03 PM
To: William Dunlap
Cc: Schoenfeld, David Alan,Ph.D.,Biostatistics; r-help@r-project.org
Subject: Re: [R] Force evaluation of a symbol when a function is created

Thanks to both: Cute question, clever, informative answer.

However, Bill, I don't think you **quite** answered him, although the
modification needed is completely trivial. Of course, I could never
have figured it out without your response.

Anyway, I interpret the question as asking for the function definition
to _implicitly_ pick up the value of Y at the time the function is
defined, rather than explicitly assigning it in local(). The following
are two essentially identical approaches: I prefer the second, because
it's more transparent to me, but that's just a matter of taste.

Y - 3
F -local({y - Y;function(x)x*y})
G - evalq(function(x)x*y,env=list(y=Y))

Yielding:

 Y - 3
 F -local({y - Y;function(x)x*y})
 G - evalq(function(x)x*y,env=list(y=Y))
 F(5)
[1] 15
 G(5)
[1] 15
 Y - 2
 F(5)
[1] 15
 G(5)
[1] 15
 F -local({y - Y;function(x)x*y})
 G - evalq(function(x)x*y,env=list(y=Y))
 F(5)
[1] 10
 G(5)
[1] 10

Cheers,
Bert

On Mon, Aug 6, 2012 at 2:24 PM, William Dunlap wdun...@tibco.com wrote:
 You could use local(), as in
 F - local({
+Y - 3
+function(x) x * Y
+})
F(7)
[1] 21
 Y - 19
 F(5)
   [1] 15

 Look into 'environments' for more.

 Bill Dunlap
 Spotfire, TIBCO Software
 wdunlap tibco.com


 -Original Message-
 From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
 Behalf
 Of Schoenfeld, David Alan,Ph.D.,Biostatistics
 Sent: Monday, August 06, 2012 2:08 PM
 To: 'r-help@r-project.org'
 Subject: [R] Force evaluation of a symbol when a function is created


 I am porting a program in matlab to R,
 The problem is that Matlab has a feature where symbols that aren't arguments 
 are
 evaluated immediately.
 That is:
 Y=3
 F=@(x) x*Y

 Will yield a function such that F(2)=6.
 If later say. Y=4 then F(2) will still equal 6.

 R on the other hand has lazy evaluation.
 F-function(x){x*Y}
 Will do the following
 Y=3
 F(2)=6
 Y=4
 F(2)=8.
 Does anyone know of away to defeat lazy evaluation in R so that I can easily 
 simulate the
 Matlab behavior.  I know that I can live without this in ordinary 
 programming but it would
 make my port much easier.

 Thanks.




 The information in this e-mail is intended only for the ...{{dropped:14}}

 __
 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.

 __
 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.



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm


The information in this e-mail is intended only for the person to whom it is
addressed. If you believe this e-mail was sent to you in error and the e-mail
contains patient information, please contact the Partners Compliance HelpLine at
http://www.partners.org/complianceline . If the e-mail was sent to you in error
but does not contain patient information, please contact the sender and properly
dispose of the e-mail.

__
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.


Re: [R] Force evaluation of a symbol when a function is created

2012-08-06 Thread R. Michael Weylandt
On Mon, Aug 6, 2012 at 9:03 PM, Schoenfeld, David
Alan,Ph.D.,Biostatistics dschoenf...@partners.org wrote:
 Thank you both, this was very helpful.  I need to study environments more. Do 
 either of you know a good source?

Disclaimer: I really have no idea what I'm talking about.

They are a somewhat subtle, but exceptionally powerful concept: see,
inter alia,

cran.r-project.org/doc/contrib/Fox-Companion/appendix-scope.pdf
http://www.lemnica.com/esotericR/Introducing-Closures/

If you know a little bit of C, it will go a long way in understanding
environments in R. You'll want to (eventually) start to associate R
names with C pointers and environments with symbol tables (hence the
fact the printed environment is just a memory address) , but that's
perhaps a little bit down the road. Environments are different in
their fundamental behavior because of this though: they're the best
way to get pass by reference in R.

Best,
Michael

__
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.


Re: [R] Force evaluation of a symbol when a function is created

2012-08-06 Thread arun
Hi,
Try this:

 F-function(x,type=local){Y=3
 x*Y}
F(3)
#[1] 9
 Y-4
 F(3)
#[1] 9
 Y-5
 F(3)
#[1] 9


A.K.



- Original Message -
From: Schoenfeld, David Alan,Ph.D.,Biostatistics dschoenf...@partners.org
To: 'r-help@r-project.org' r-help@r-project.org
Cc: 
Sent: Monday, August 6, 2012 5:07 PM
Subject: [R] Force evaluation of a symbol  when a function is created


I am porting a program in matlab to R,
The problem is that Matlab has a feature where symbols that aren't arguments 
are evaluated immediately.
That is:
Y=3
F=@(x) x*Y

Will yield a function such that F(2)=6.
If later say. Y=4 then F(2) will still equal 6.

R on the other hand has lazy evaluation.
F-function(x){x*Y}
Will do the following
Y=3
F(2)=6
Y=4
F(2)=8.
Does anyone know of away to defeat lazy evaluation in R so that I can easily 
simulate the Matlab behavior.  I know that I can live without this in ordinary 
programming but it would make my port much easier.

Thanks.




The information in this e-mail is intended only for the ...{{dropped:14}}

__
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.


__
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.