2013-02-01 30 views
0

HEJ訪問將R DERIV .grad

我試圖以訪問.grad [ 「X」] < - 2 * X來自:(這是一個例子,很明顯)

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 
>}) 

我該怎麼做這是複製和粘貼,並且肯定不是有意的

謝謝。

回答

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()返回的表達式的內部結構進行了細微的改變,那麼這種結構將會被破壞;因此這種結構沒有被記錄,因此它不能保持不變...

+0

沒問題。我會的,因爲這是確定的。 thanx – Toby

+0

但是,我該如何訪問這些「點符號元素」,即.value,.grad? (因缺乏更好的描述知識) – Toby

+0

這是最好的方式? dx < - deriv(〜x^2,「x」)____ dx [[1]] [[2]] [[3]] ____ > x^2 – Toby