如何自定义 class "expression" 的对象?我需要编写一个参数更改的函数

How can I customize an object of the class "expression"? I need to write a function for which the parameters change

我正在尝试编写一个需要为其查找参数的表达式,但是一旦我将参数定义为来自另一个变量,该表达式就无法识别它们。例如:

这很好用:

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)

最重要的是,我需要将这两个参数放入一个 optim 中,以便我可以尝试找到它们,这就是为什么我需要一个每次相应地更改表达式的函数。

您要查找的是插值注入。有很多不同的方法可以实现它。我最喜欢的方法是使用 bquote 而不是 quote/expression:

exp_fx <- function (params) {
    u <- params[1L]
    D <- params[2L]
    bquote(.(u) * x * exp(-.(D) * t))
}

(请注意,不需要 expr 变量或 for the return() function call;我还将函数名称中的 . 替换为 _,因为 . 可能会导致与 S3 方法混淆,因此可能存在问题。)

另一种方法是使用 substitute:

exp_fx <- function (params) {
    substitute(
        u * x * exp(-D * t),
        list(u = params[1L], D = params[2L])
    )
}