【问题标题】:Transform a "call" object into a function in R将“调用”对象转换为 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

【问题讨论】:

    标签: r function object derivative


    【解决方案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
    

    无论您为ax 传递什么值,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
    

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多