将“调用”对象转换为 R 中的函数
Posted
技术标签:
【中文标题】将“调用”对象转换为 R 中的函数【英文标题】:Transform a "call" object into a function in R 【发布时间】:2022-01-12 10:05:32 【问题描述】:从派生中,我得到一个“调用”对象,如代码 sn-p 所示。我想把它转换成一个带参数的函数,但我不知道如何让它正确。它只返回调用对象。
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
【问题讨论】:
【参考方案1】: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
无论您为a
和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
【讨论】:
以上是关于将“调用”对象转换为 R 中的函数的主要内容,如果未能解决你的问题,请参考以下文章
将 NULL 指针转换为对象并调用其成员函数之一有实际好处吗?
将 QJsonObject 转换为 Javascript 对象
R语言unlist函数将复杂数据(list列表dataframe字符串String)对象处理成简单向量vector形式:将包含dataframe和字符串的向量列表转换为单个向量(删除数据名称)