2014-10-22 43 views
2

我正在使用包Ryacas的deriv函數。 輸出是一個表達式。 我想使用表達式的一部分作爲一個函數,所以我可以試試它的值。R中的類表達式使用它中的元素

下面是示例

s <- expression(2*y*x + 2*y -1*x^2-2*y^2); 
a<-deriv(s,c("x","y")); 

輸出是

expression({ 
    .expr1 <- 2 * y 
    .expr10 <- 2 * x 
    .value <- .expr1 * x + .expr1 - 1 * x^2 - 2 * y^2 
    .grad <- array(0, c(length(.value), 2L), list(NULL, c("x", 
     "y"))) 
    .grad[, "x"] <- .expr1 - .expr10 
    .grad[, "y"] <- .expr10 + 2 - 2 * .expr1 
    attr(.value, "gradient") <- .grad 
    .value 

我想用.grad [中, 「x」]。 做到這一點的唯一方法是等處理表達式作爲列表

a[[1]][6] 

但輸出中是一流的呼叫。

(.grad[, "x"] <- .expr1 - .expr10)() 

任何幫助?這個想法是採取這種輸出,並將其轉換爲函數,以便我可以傳遞不同的值

謝謝!

+0

在的問題是不使用Ryacas即使Ryacas是因爲'x'加載,並在所有的例子'y'沒有被定義爲Ryacas符號。它在R中使用'deriv'函數。試試'demo(「Ryacas-Function」)'作爲一個例子來說明如何與Ryacas合作。另請嘗試'vignette(「Ryacas」)'獲取更多信息。 – 2014-10-22 11:18:09

+0

謝謝!對不起,提交這個錯誤 – donpresente 2014-10-22 13:08:39

回答

3

deriv函數返回expression,您可以通過body函數將其設置爲函數的主體。例如:

 #declare an empty function with the x and y arguments 
    myfun<-function(x,y) {} 
    #set the body of the function as the object returned by deriv 
    body(myfun)<-a 
    #call myfun 
    myfun(2,3) 
    #[1] -4 
    #attr(,"gradient") 
    #  x y 
    #[1,] 2 -6 
+0

尼古拉。謝謝!如果我想找到最小化該功能的值。不使用具有不同值的for循環。這是可能的正確和反功能? – donpresente 2014-10-22 13:10:03

+0

請參閱'?optim'函數來搜索最小值或最大值。 – nicola 2014-10-22 13:36:56

+0

再次感謝尼古拉! – donpresente 2014-10-22 19:15:42