我正在嘗試撰寫一個需要為其查找引數的運算式,但是一旦我將引數定義為來自另一個變數,該運算式就無法識別它們。例如:
這作業正常:
expression(2*x*exp(-3*t))
我得到:
expression(2 * x * exp(-3 * t))
但問題是我不知道 2 和 3 是否是正確的值(我正在嘗試找到它們)。所以我試著把它放到一個像這樣的函式中:
exp.fx <- function(params){
u <- params[1]
D <- params[2]
expr1 <- expression(u*x*exp(-D*t))
return(expr1)
}
這就是我得到的:
> exp.fx(c(2,3))
u * x * exp(-D * t)
我需要得到
2 * x * exp(-3 * t)
最重要的是,我需要將這兩個引數放入優化中,以便我可以嘗試找到它們,這就是為什么我需要一個每次都相應地更改運算式的函式。
uj5u.com熱心網友回復:
您正在尋找的是插值或注入。有很多不同的方法來實作它。我最喜歡的方法是使用bquote代替quote/ expression:
exp_fx <- function (params) {
u <- params[1L]
D <- params[2L]
bquote(.(u) * x * exp(-.(D) * t))
}
(請注意,有沒有必要的expr變數,或為return()函式呼叫;我也換成了.由函式名_,因為.會導致混亂與S3方法,因此可能存在問題。)
另一種方法是使用substitute:
exp_fx <- function (params) {
substitute(
u * x * exp(-D * t),
list(u = params[1L], D = params[2L])
)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/390116.html
上一篇:自定義函式不從輸入讀取值
下一篇:將函式的回傳值設定為變數js
