我是编码和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
答案 0 :(得分:1)
让我们试试这个:
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
结果会提供更多信息。
答案 1 :(得分:0)
你应该传递给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