return向量元素乘积的函数

Function to return function of product of vector elements

对于给定的节点向量,例如,nodes = 1:5 我想要函数 prod_x 到 return 形式为 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

期望此为 return 函数,但 returns 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 package (v2.0.1)

于 2021-11-06 创建

可以看出,上述方法没有按预期工作。任何人都可以解释如何使其以矢量化方式工作吗?

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

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

这对一个 x 可以很好地工作,但是 prod() 会将 x 的多个值合并为一个结果。如果你想让你的函数在 x 上被矢量化,那么你也可以添加

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