如何评估符号导数作为R中的函数?

How to evaluate symbolic derivative as a function in R?

我能够使用以下语句在 R 中计算 logit 函数的符号导数:

deriv(quote(exp(-9.3 + 0.0146*x)/(1 + exp(-9.3 + 0.0146*x))),"x")

结果是一个表达式:

expression({
    .expr4 <- exp(-9.3 + 0.0146 * x)
    .expr5 <- 1 + .expr4
    .expr7 <- .expr4 * 0.0146
    .value <- .expr4/.expr5
    .grad <- array(0, c(length(.value), 1L), list(NULL, c("x")))
    .grad[, "x"] <- .expr7/.expr5 - .expr4 * .expr7/.expr5^2
    attr(.value, "gradient") <- .grad
    .value
})

但是,当我尝试 return 函数中的表达式时,例如:

DerivLogit <- function(x){
    deriv(expression(exp(-9.3 + 0.0146*x)/(1 + exp(-9.3 + 0.0146*x))),"x")
}

评估 DerivLogit(x) 当然不会用参数 x 替换我表达式中的变量 x。因此,例如,DerivLogit(1) 等于 DerivLogit(2),两者都只是 return 没有任何参数替换的表达式。

有没有办法将导数表达式转换成一个函数,我可以计算参数(例如 x)将替换的位置,以便我可以看到给定 x 值的数值结果? 如果是这样,我如何在 R 中这样做?

您可以使用eval来计算表达式

DerivLogit <- function(x){
  eval(deriv(expression(exp(-9.3 + 0.0146*x)/(1 + exp(-9.3 + 0.0146*x))),"x"))
}