PatGauthier
2013-Mar-22 11:28 UTC
[R] Trouble embedding functions (e.g., deltaMethod) in other functions
Dear R community, I've been writing simple functions for the past year and half and have come across a similar problem several times. The execution of a function within my own function produces NaN's or fails to execute as intended. My conundrum is that I can execute the function outside of my function without error, so it's difficult for me, as a novice functioneer, to figure out what's going wrong. Here's my example for deltaMethod(): t <- c(0.00000, 26.24551, 61.78180, 86.88254, 221.75480) m <- c(48.591707, 15.655895, 12.284635, 5.758547, 0.000000) dat <- data.frame(t = t, m = m) m0 <- m[1] t0 <- t[5] nlls <- nls(m ~ (m0^(1/lambda) - (t * m0/t0)^(1/lambda))^lambda, start = list(lambda = 1), data = dat) xVal <- seq(0, t0, length = 10) mod.SE <- list() for(i in 1:length(xVal)){ z <- xVal[i] mod.SE[[i]] <- deltaMethod(nlls, "(m0^(1/lambda) - (z * m0/t0)^(1/lambda))^lambda")$SE } mod.SE This code executes deltaMethod() flawlessly (NOTE: [[1]] and [[10]] are supposed to be NaN's). However, my goal is to embed the deltaMethod inside another function I'm writing. For brevity's sake, here's a very simple example that produces the same problem. deltaSE <- function(mod, x){ mod.SE <- list() for(i in 1:length(xVal)){ z <- xVal[i] mod.SE[[i]] <- deltaMethod(mod, "(m0^(1/lambda) - (z * m0/t0)^(1/lambda))^lambda")$SE } mod.SE } deltaSE(nlls, xVal) deltaMethod, when embedded in my deltaSE function produces only NaN's. When I debug(deltaSE) and debug(deltaMethod), and then debug(deltaMethod.default) once delta method is debugging within deltaSE, I can see that eval() is producing a value of 0 for the estimate value of m. An m of 0 indeed would produce an NaN. I'm just not sure why this function is performing differently inside and outside my function. Any help for a lowly functioneer would be great! Patrick -- View this message in context: http://r.789695.n4.nabble.com/Trouble-embedding-functions-e-g-deltaMethod-in-other-functions-tp4662178.html Sent from the R help mailing list archive at Nabble.com.
jim holtman
2013-Mar-22 11:50 UTC
[R] Trouble embedding functions (e.g., deltaMethod) in other functions
Here is what you sent: deltaSE <- function(mod, x){ mod.SE <- list() for(i in 1:length(xVal)){ z <- xVal[i] mod.SE[[i]] <- deltaMethod(mod, "(m0^(1/lambda) - (z * m0/t0)^(1/lambda))^lambda")$SE } mod.SE } deltaSE(nlls, xVal) but within the function, there is no 'xVal'; did you really mean 'x' as in: deltaSE <- function(mod, x){ mod.SE <- list() for(i in 1:length(x)){ z <- x[i] mod.SE[[i]] <- deltaMethod(mod, "(m0^(1/lambda) - (z * m0/t0)^(1/lambda))^lambda")$SE } mod.SE } deltaSE(nlls, xVal) On Fri, Mar 22, 2013 at 7:28 AM, PatGauthier <pgauthi1@lakeheadu.ca> wrote:> Dear R community, > > I've been writing simple functions for the past year and half and have come > across a similar problem several times. The execution of a function within > my own function produces NaN's or fails to execute as intended. My > conundrum > is that I can execute the function outside of my function without error, so > it's difficult for me, as a novice functioneer, to figure out what's going > wrong. > > Here's my example for deltaMethod(): > > t <- c(0.00000, 26.24551, 61.78180, 86.88254, 221.75480) > m <- c(48.591707, 15.655895, 12.284635, 5.758547, 0.000000) > dat <- data.frame(t = t, m = m) > m0 <- m[1] > t0 <- t[5] > nlls <- nls(m ~ (m0^(1/lambda) - (t * m0/t0)^(1/lambda))^lambda, > start = list(lambda = 1), data = dat) > xVal <- seq(0, t0, length = 10) > mod.SE <- list() > for(i in 1:length(xVal)){ > z <- xVal[i] > mod.SE[[i]] <- deltaMethod(nlls, "(m0^(1/lambda) - (z * > m0/t0)^(1/lambda))^lambda")$SE > } > mod.SE > > This code executes deltaMethod() flawlessly (NOTE: [[1]] and [[10]] are > supposed to be NaN's). However, my goal is to embed the deltaMethod inside > another function I'm writing. For brevity's sake, here's a very simple > example that produces the same problem. > > deltaSE <- function(mod, x){ > mod.SE <- list() > for(i in 1:length(xVal)){ > z <- xVal[i] > mod.SE[[i]] <- deltaMethod(mod, "(m0^(1/lambda) - (z * > m0/t0)^(1/lambda))^lambda")$SE > } > mod.SE > } > deltaSE(nlls, xVal) > > deltaMethod, when embedded in my deltaSE function produces only NaN's. > When > I debug(deltaSE) and debug(deltaMethod), and then > debug(deltaMethod.default) > once delta method is debugging within deltaSE, I can see that eval() is > producing a value of 0 for the estimate value of m. An m of 0 indeed would > produce an NaN. I'm just not sure why this function is performing > differently inside and outside my function. > > Any help for a lowly functioneer would be great! > Patrick > > > > -- > View this message in context: > http://r.789695.n4.nabble.com/Trouble-embedding-functions-e-g-deltaMethod-in-other-functions-tp4662178.html > Sent from the R help mailing list archive at Nabble.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. >-- Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it. [[alternative HTML version deleted]]