首页 > 解决方案 > 返回向量元素乘积函数的函数

问题描述

对于给定的节点向量,例如,节点 = 1:5,我希望函数prod_x返回 x 形式的函数
f(x) = (x−1) * (x−2) * (x−3) * (x−4) * (x−5)

prod_x <- function(nodes){
    out <- prod(x - nodes)
    return(out)
}

我尝试在下面编写reprex我期望的内容,但它没有按预期工作。

在一组节点值样本上测试函数1:5

NODES <- 1:5
z <- prod_x(nodes = NODES)
#> Error in prod_x(nodes = NODES): object 'x' not found

期望 this 返回一个函数但返回 0 值

z 
#> Error in eval(expr, envir, enclos): object 'z' not found

z(0)在这种情况下应该产生 -120,即 -factorial(5)。

那是,z(0) = (0 - 1)*(0 - 2)*(0 - 3)*(0 - 4)*(0 - 5)

z(0)
#> Error in z(0): could not find function "z"

reprex 包于 2021-11-06 创建(v2.0.1)

可以看出,上述方法没有按预期工作。谁能解释如何使它工作,并以矢量化的方式?

标签: rvectorization

解决方案


现在你没有返回一个函数。为了创建一个新函数,您应该看到function关键字。这也是您定义参数的地方。它应该看起来像

prod_x <- function(nodes){
  function(x) {
    prod(x - nodes)
  }
}

这对一个人来说很好,xprod()会将多个值折叠x成一个结果。如果您希望您的函数被矢量化x,那么您还可以添加

prod_x <- function(nodes){
  Vectorize(function(x) {
    prod(x - nodes)
  })
}

推荐阅读