R 用户定义函数中的导数和表达式

Derivatives and expressions in R user defined function

我是编码和 R 的新手,我正在尝试自学,但有点吃力。

我正在尝试创建一个简单的微积分函数,使 del 运算符 ∇ =< / , / , / > 作用于标量。我可以手动计算导数:

> c(D(expression(x*y*z),'x'),D(expression(x*y*z),'y'), 
D(expression(x*y*z),'z'))
[[1]]
y * z

[[2]]
x * z

[[3]]
x * y

这是我目前的情况,显然需要更多的输入。谁能帮帮我,我将不胜感激:)

> grad <- function(scal) {
+    c(D(expression(scal),'x'),D(expression(scal),'y'),
     D(expression(scal),'z'))
+ }

> grad(x*y*z)
[1] 0 0 0

您应该向 grad 传递一个表达式:

grad <- function(scal) {
   c(D(scal,'x'), D(scal,'y'), D(scal,'z'))
}
grad(expression(x*y*z))

grad 给出的输出是具有 3 个元素的 list

[[1]]
y * z

[[2]]
x * z

[[3]]
x * y

让我们试试这个:

grad <- function(scal){
    scal <- substitute(scal)
    sapply(c('x', 'y', 'z'), function(v) D(scal, v))
}

# > grad(x*y*z)
# $x
# y * z
# 
# $y
# x * z
# 
# $z
# x * y

注意:如果我们将 sapply 替换为 lapply,输出将与您的问题完全相同。但我认为 names 的结果信息量更大。