Hi All, I copied code from an Splus manual to take symbolic derivatives: my.deriv <- function( mathfunc, var ) { tmp <- substitute(mathfunc) name <- deparse(substitute(var)) D(tmp, name) } (The code also works in R). When I try this on x^2 I get > my.deriv(x^2, x) 2 * x Suppose I assign the output of my.deriv(x^2, x) to deriv.xsqr : > deriv.xsqr <- my.deriv(x^2, x) > deriv.xsqr 2 * x > My question is, how do I take the derivative of deriv.xsqr (I want the answer to be 2) ? The naive guess > my.deriv(deriv.xsqr, x) [1] 0 is obviously wrong. I suspect that, to get the derivative I'm looking for, I need to pass something like deparse(deriv.xsqr) into my.deriv, but this doesn't work either. Thanks in advance, Jeff Miller -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
On Fri, 6 Apr 2001, Jeff Miller wrote:> > > Hi All, > > > I copied code from an Splus manual to take symbolic derivatives: > > my.deriv <- function( mathfunc, var ) > { > tmp <- substitute(mathfunc) > name <- deparse(substitute(var)) > D(tmp, name) > } > > (The code also works in R). > > > When I try this on x^2 I get > > > my.deriv(x^2, x) > 2 * x > > Suppose I assign the output of my.deriv(x^2, x) to deriv.xsqr : > > > deriv.xsqr <- my.deriv(x^2, x) > > deriv.xsqr > 2 * x > > > > My question is, how do I take the derivative of deriv.xsqr > (I want the answer to be 2) ?FAQ 7.6 explains that this is precisely why the D() function doesn't work like my.deriv(). You can do it with R> eval(substitute(my.deriv(expr,x),list(expr=deriv.xsqr))) [1] 2 but this is making life unnecessarily difficult for yourself. R> D(D(expression(x^2),"x"),"x") [1] 2 is easier -thomas Thomas Lumley Asst. Professor, Biostatistics tlumley at u.washington.edu University of Washington, Seattle -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
"Jeff Miller" <jdm at xnet.com> writes:> > deriv.xsqr <- my.deriv(x^2, x) > > deriv.xsqr > 2 * x > > > > My question is, how do I take the derivative of deriv.xsqr > (I want the answer to be 2) ? > The naive guess > > > my.deriv(deriv.xsqr, x) > [1] 0 > > is obviously wrong. > > I suspect that, to get the derivative I'm looking for, I need to > pass > something like deparse(deriv.xsqr) into my.deriv, but this doesn't > work > either.I think the cleanest way is> eval(substitute(my.deriv(f,x),list(f=deriv.xsqr)))[1] 2 -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._