【发布时间】:2020-10-14 11:13:11
【问题描述】:
我正在尝试创建一个返回给定公式的梯度函数的函数。一个最小的例子是(不将其封装在函数中):
f1 <- deriv(y ~ a0 + a1*x + a2*x^2, c('a0', 'a1', 'a2'), function(a0, a1, a2, x){} )
grad <- attr(f1(a0 = 1, a1 = 2, a2 = 1.5, x = 3),"gradient")
我知道 f1 不依赖于 a、b 和 c,因为它是线性的,但它可能会这样做。
现在,我想创建一个函数,该函数采用公式和变量并返回 f1,如示例所示。一些大纲(不起作用)是:
gradient_function <- function(formula, variables){
f1 <- deriv(formula, variables, function(variables, x){} )
return(f1)
}
问题在于如何告诉 R 我第二次使用variables,它是从deriv 创建的函数的参数。
我已经搜索了一段时间,唯一可行的解决方案是eval(parse()),这也意味着使用单引号和双引号,当人们想要使用命名参数评估函数时,它感觉非常不稳定并且会带来一些额外的烦恼,整个表达式得到如下内容:
但我想知道是否有更好的方法我不知道并且这并不意味着构建一个可怕的字符串。
formula <- y ~ a0 + a1*x + a2*x^2
vars <- paste0("a", 0:2)
vector <- "c('a0', 'a1', 'a2')"
eval(parse(text = paste0("f2 <- deriv(", formula, ",", variables, ", function(", paste(vars, collapse=","),", x){} )")))
谢谢!
【问题讨论】:
标签: r