[R] Functions within functions in R and S-Plus

Liaw, Andy andy_liaw at merck.com
Tue Jun 7 19:05:31 CEST 2005


The easiest way, perhaps, is to assign the internal functions to frame 1:

> mainfunc <- function(x){
+ 
+ est <- function(x,par){
+ abs(sum(par*x))
+ }
+ 
+ func <- function(par,x){
+     est(x,par)
+  }
+ 
+ est.theta <- function(x){
+     optimize(func,lower=-10, upper=20,x=x)$minimum
+     }
+ 
+ assign("func", func, frame=1)
+ assign("est", est, frame=1)
+ est.theta(x)
+ 
+ }
> 
> x <- 1:10
> mainfunc(x)
[1] 5.286101e-006

You should read about the scoping rule differences in, e.g., S Programming.

Andy

> From: Victor Gravenholt
> 
> Sorry to bother you about a S-Plus related problem, but I 
> hope someone 
> can help.
> I have tried to "translate" some code from R to S-Plus (I 
> have colleague 
> that insists on using S-Plus. And yes, I have tried to make 
> him change 
> to R...)
> The following code works out fine in R, but in S-Plus (S-PLUS 6.2 for 
> Windows Professional Ed.) I get the error message "Problem in 
> est.theta(x): Object "func" not found ".
> I have tried to keep most of the structure in my original 
> problem (but 
> simplified it!), so the code could seem a bit strange.
> I suspect that this has something to do with different 
> scoping rules in 
> R and S-Plus, but still I have not found a workable solution 
> in S-Plus.
> 
> mainfunc <- function(x){
> 
> est <- function(x,par){
> abs(sum(par*x))
> }
> 
> func <- function(par,x){
>     est(x,par)
>  }
> 
> est.theta <- function(x){
>     optimize(func,lower=-10, upper=20,x=x)$minimum
>     }
> 
> est.theta(x)
> 
> }
> 
> x <- 1:10
> mainfunc(x)
> 
> 
> 
> 
> Any help is greatly appreciated.
> 
> Victor
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
> 
>




More information about the R-help mailing list