访问R deriv .grad

时间:2013-02-01 23:36:24

标签: r derivative

HeJ小鼠

我正试图访问.grad [,“x”]< - 2 * x from :(显然这是一个例子)

deriv(~ x^2,"x")
>expression({
>.value <- x^2
>.grad <- array(0, c(length(.value), 1L), list(NULL, c("x")))
>.grad[, "x"] <- 2 * x
>attr(.value, "gradient") <- .grad
>.value
>})

我该怎么做复制和粘贴很麻烦,而且肯定没有意图

谢谢。

1 个答案:

答案 0 :(得分:2)

我认为你最好用D()

D(expression(x^2),"x")
## 2 * x

D()deriv()在同一页面上进行了记录(即?D?deriv将您带到同一页面)

显然,~快捷方式不适用于D,但您可以使用quote()而不是expression()来保存一些按键。

eval(D(quote(x^2), "x"),list(x=5))
## 10

deriv的结果中拉出渐变表达式是非常糟糕的,因为它不是作者认为你会尝试做的。 .grad不是最终结果的属性,它是函数内部使用的临时变量。在这种情况下,作者认为用户想要的是在评估表达式时渐变的数值值:

dd <- deriv(~ x^2,"x")
attr(eval(dd,list(x=5)),"gradient")
##       x
## [1,] 10

你可以得到表达式,但只能通过在表达式的主体中进行特定的挖掘。 dd[[1]]是表达式的主体。 dd[[1]][[4]]是第四个子表达式:

dd[[1]][[4]]
## .grad[, "x"] <- 2 * x

然后我们可以提取右侧(表达式在内部以前缀表示法存储为{operator,LHS,RHS}

dd[[1]][[4]][[3]]
## 2 * x

但这肯定是困难的方式,如果R作者对deriv()返回的表达式的内部结构稍作改动,那么将会破坏;这种结构没有记录,因此不保证保持不变......