On Mon, Feb 7, 2011 at 9:21 AM, Joshua Wiley <jwiley.ps...@gmail.com> wrote: > > Hi, > When a function cannot find a variable inside its own environment, it > will look to its parent environment.
This is false. It will "look to" its **enclosing environment" / "enclosure" . See ?environment (Note: This is fundamental to R scoping) -- Bert > > If you define a function in the > global environment, the global environment is its parent environment. > However, if you define a function in the global environment, but then > proceed to use lapply() with another function, the actual variable > ll() needs to access is neither passed to II (so it is not in its > environment) nor is it in the global environment (II's parent > environment). It is in the function in lapply's environment, which is > inaccessible to II. I have made some small changes to your code that > gets around this, but I am still not convinced this is really doing > what you want, but that is a whole other question/problem. > > Also, for future reference, you are more likely to get a response/help > if you mention the required packages. I made educated guesses, that > you are using mle() from "stats4" and count() from "plyr" (I realize > you may not even be aware that those functions came from non-default > loading packages). > > HTH, > > Josh > > Here are my edits to your code: > > foo <- function(x) { > ## load required packages (guessing here) > require(stats4) > require(plyr) > > ## define ll function _inside_ foo > ## this is important if you want it to have access > ## to arguments in foo > ll <- function(lambda = 1) { > cat("x in ll()", x, "\n") > y.fit <- dpois(x, lambda) > sum( (y - y.fit)^2 ) > } > > ## Your calculations > ## (though I'm not convinced this is what you really want) > raw.data <- rpois(100, lambda.data[x]) > freqTab <- count(raw.data) > x <- freqTab$x > y <- freqTab$freq / sum(freqTab$freq) > > cat("x in lapply", x, "\n") > fit <- mle(ll) > coef(fit) > } > > ## Data > lambda.data <- runif(10, 0.5, 10) > ## Run it through lapply for x = 1:10 > lapply(1:10, FUN = foo) > > > > > > Here is a little example which show my problem: > > > > # R-code --------------------------------- > > > > lambda.data <- runif(10,0.5,10) > > > > ll <- function(lambda = 1) { > > cat("x in ll()",x,"\n") > > y.fit <- dpois(x, lambda) > > > > sum( (y - y.fit)^2 ) > > > > } > > > > lapply(1:10, FUN = function(x){ > > > > raw.data <- rpois(100,lambda.data[x]) > > > > freqTab <- count(raw.data) > > x <- freqTab$x > > y <- freqTab$freq / sum(freqTab$freq) > > cat("x in lapply", x,"\n") > > fit <- mle(ll) > > > > coef(fit) > > }) > > > > Can anybody help? > > > > Antje > > > > ______________________________________________ > > 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. > > > > > > -- > Joshua Wiley > Ph.D. Student, Health Psychology > University of California, Los Angeles > http://www.joshuawiley.com/ > > ______________________________________________ > 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 ______________________________________________ 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.