Erin Hodgess <[EMAIL PROTECTED]> writes:

> Dear R and S People:
> 
> I have run across something very strange.  Here is a function that I wrote
> for R:
> 
> boot1 <- function(y,method="f",p=1) {
>   n1 <- length(y)
>   n2 <- n1*p
>   n3 <- n2 - 1
>   a <- 0.5*(outer(1:n3,1:n3,function(x,y){n2 - pmax(x,y)}))
>   return(a)
> }
[and it doesn't work in S]

Well, if you didn't understand what lexical scoping was about before,
now is your chance... 

n2 is in the lexical scope of the (unnamed) function that is getting
passed to outer(), because the function is defined in (the environment
of) the call to boot1. Therefor the value of n2 is available inside
that function.

S doesn't have lexical scoping. Instead it has "frame 0" and "frame
1", which can be used as "scratchpads" for routines to scribble pieces
of information on. So a not-quite-so-dirty variant of your solution is
to assign n2 to frame 1, rather than as permanent data. Not the only
solution, obviously.

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - ([EMAIL PROTECTED])             FAX: (+45) 35327907

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to