is there a good way to get the following fragment to work when calling
it as "wrapper(1)" ?
#======== cut here=========wrapper <- function (choose=0)
{
x <- seq(0,2*pi,len=100)
y <- sin(1.5*x);
y <- rnorm(y,y,.1*max(y))
if (choose==0) {
rm(fifu,pos=1)
fifu <- function(w,x) {sin(w*x)}
}
else
assign('fifu',function(w,x) {sin(w*x)},.GlobalEnv)
res <- nls(y ~ fifu(w,x),start=list(w=1))
res
}
#======== cut here=========
I understand, the problem is that the scoping rules are such that
"nls"
does not resolve 'fifu' in the parent environment, but rather in the
GlobalEnv. (this is different for the data, which *are* taken from the
parent environment of the nls-call).
The solution to "assign" 'fifu' directly into the GlobalEnv
(which
happens when calling 'wrapper(1)") does obviously work but leads to the
undesirable effect of accumulating objects in the workspace which are
not needed there (and might overwrite existing ones).
so: is there a way to enforce that "nls" takes the model definition
from
the parent environment together with the data?
joerg