I need to find the root of the second derivative of many curves and do not want to cut and paste the expression results from the deriv() or D() functions every time. Below is an example. What I need to do is refer to "fn2nd" in the uniroot() function, but when I try something like uniroot(fn2nd,c(0,1)) I get an error, so I have resorted to pasting in the expression, but this is highly inefficient.
Thanks, J y <- c(9.9,10,10,9.5,9,6,3,1,0,0,0) b <- seq(0,1,by=0.1) dat <- data.frame(y = y, b = b) plot(y ~ b, xlim = c(0,1), ylim= c(-12,12)) fn <- nls(y ~ asym/(1 + exp(p * b - q)),data = dat, list(asym=10,p=16,q=7), trace=T) curve(10.001/(1 + exp(14.094 * x - 7.551)), from = 0, to = 1, add = T) fn2 <- expression(10.001/(1 + exp(14.094 * x - 7.551))) fn2nd <- D(D(fn2, "x"), "x") ex <- seq.int(from=0, to=1, length.out = 1000) y1 <- eval(fn2nd, envir = list(x = ex), enclos = parent.frame()) lines(ex, y1, type = "l") r <- uniroot(function(x) -(10.001 * (exp(14.094 * x - 7.551) * 14.094 * 14.094)/(1 + exp(14.094 * x - 7.551))^2 - 10.001 * (exp(14.094 * x - 7.551) * 14.094) * (2 * (exp(14.094 * x - 7.551) * 14.094 * (1 + exp(14.094 * x - 7.551))))/((1 + exp(14.094 * x - 7.551))^2)^2),interval=c(0,1),tol = 0.0001) r$root abline(h=0, col = "red") abline(v=r$root, col = "green") arrows(0.6, -2, r$root,0, length = 0.1, angle = 30, code = 2, col = "red") text(0.765,-2.3,paste("b = ",r$root,sep="")) -- View this message in context: http://r.789695.n4.nabble.com/Using-uniroot-with-output-from-deriv-or-D-tp3325635p3325635.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.