從派生我得到一個“呼叫”物件,如代碼片段所示。我想將其轉換為帶引數的函式,但我不知道如何正確使用。它只回傳呼叫物件。
someDeriv <- D(expression(a * x^2 x), "x")
someDeriv
#returns: a * (2 * x) 1
class(someDeriv)
#returns: "call"
#here comes the important part
fn <- as.function(alist(a=,x=,someDeriv))
fn(a=1, x=2)
#returns: a * (2 * x) 1
#should return: 5
uj5u.com熱心網友回復:
alist參考它的引數,所以當你傳遞變數的名稱時,它們的值不會在回傳的串列中被替換。這意味著,alist(a =, x =, someDeriv)是不是等同于alist(a =, x =, a * (2 * x) 1)。
someDeriv <- D(expression(a * x^2 x), "x")
l1 <- alist(a =, x =, someDeriv)
l1
$a
$x
[[3]]
someDeriv
l2 <- alist(a =, x =, a (2 * x) 1)
l2
$a
$x
[[3]]
a (2 * x) 1
您的功能fn實際上定義為:
fn <- as.function(l1)
fn
function (a, x)
someDeriv
無論您為aand傳遞什么值x,都fn回傳 的值someDeriv,這在您的全域環境中是呼叫a * (2 * x) 1。
要獲得您想要的行為,您可以這樣做:
l3 <- c(alist(a =, x =), list(someDeriv))
l3
$a
$x
[[3]]
a * (2 * x) 1
fn <- as.function(l3)
fn(a = 1, x = 2)
[1] 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/376158.html
