R用户定义函数中的衍生物和表达式
问题描述:
我是编码和R的全新人物,我试图教自己,但我挣扎了一下。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 <- 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
的结果更具信息性。
+0
这是非常好的,完美的作品! – nkwm
答
你应该传递给grad
的表达式:
grad <- function(scal) {
c(D(scal,'x'), D(scal,'y'), D(scal,'z'))
}
grad(expression(x*y*z))
通过grad
给出的输出是list
有3个要素:
[[1]]
y * z
[[2]]
x * z
[[3]]
x * y
也许'deriv'更好:'deriv(〜x * y * z,c('x','y','z'))'计算所有的部分偏差 – user2957945