如何评估符号导数作为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"))
}
我能够使用以下语句在 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"))
}