0

ヘジ

私は .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
>})

これを行うにはどうすればよいですか コピーして貼り付けるのは面倒で、意図したものではありません

ありがとうございました。

4

1 に答える 1

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]]は 4 番目のサブ式です。

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

次に、右辺を抽出できます (式は、次のようにプレフィックス表記で内部的に保存されます{operator,LHS,RHS}

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

しかし、これは確かに難しい方法のようです。さらに、R の作成者がderiv();によって返される式の内部構造にわずかな変更を加えると、壊れてしまいます。この構造は文書化されていないため、同じままであるとは限りません...

于 2013-02-01T23:44:35.477 に答える