A cleaner way is to pass "n2" to "outer" as a "..." argument, as in the following modification of your code:
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.){n2. - pmax(x,y)}, n2.=n2)) return(a) }
y1 <- c( 9, 8, 7, 3, 6)
boot1(y=y1,p=4)
The use of "assign" like this might be called "dirty programming", in the sense that any object "n2" in working directory will be overwritten without warning by the function "boot1", and then "boot1" leaves the "n2" garbage after it's done. If you aren't aware of this side effect, you could get unpredictable problems with any other use of "n2" in the working directory.
The difference arises because of differences in the way R and S-Plus "scope" variable names. This is described in the "R Language Definition" manual; search for "scope" and "scoping" or do an R Site Search for terms like this at "www.r-project.org".
Passing the "n2" as an argument as I did in the above code seemed to work for me just now in S-Plus 6.2 and R 1.9.1 under Windows 2000.
Hope this helps. Spencer Graves
Erin Hodgess wrote:
Dear R and S People:
I ended up using the "assign" command, and things work in S+.
boot1 <- function(y,method="f",p=1) { n1 <- length(y) #n2 <- n1*p assign("n2",n1*p) n3 <- n2 - 1 a <- 0.5*(outer(1:n3,1:n3,function(x,y){n2 - pmax(x,y)})) return(a) }
thanks for listening!
Sincerely, Erin H mailto: [EMAIL PROTECTED]
-------------------------------------------------------------------- This message was distributed by [EMAIL PROTECTED] To ...(s-news.. clipped)...
-- Spencer Graves, PhD, Senior Development Engineer O: (408)938-4420; mobile: (408)655-4567
______________________________________________ [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