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
的结果信息量更大。
我是编码和 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
的结果信息量更大。