如何自定义 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])
)
}
我正在尝试编写一个需要为其查找参数的表达式,但是一旦我将参数定义为来自另一个变量,该表达式就无法识别它们。例如:
这很好用:
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])
)
}