r - 返回向量元素乘积函数的函数
问题描述
对于给定的节点向量,例如,节点 = 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)
可以看出,上述方法没有按预期工作。谁能解释如何使它工作,并以矢量化的方式?
解决方案
现在你没有返回一个函数。为了创建一个新函数,您应该看到function
关键字。这也是您定义参数的地方。它应该看起来像
prod_x <- function(nodes){
function(x) {
prod(x - nodes)
}
}
这对一个人来说很好,x
但prod()
会将多个值折叠x
成一个结果。如果您希望您的函数被矢量化x
,那么您还可以添加
prod_x <- function(nodes){
Vectorize(function(x) {
prod(x - nodes)
})
}
推荐阅读
- angular - Angular Material Object(...) 不是函数
- ios - Stripe paymentContext 确实将 paymentContext.selectedPaymentOption 设置为默认卡
- reactjs - 如何将事件处理程序添加到第三方表单组件中的按钮
- bash - 在 Jenkins 作业中共享数据 beetwen 脚本
- python - 如何将包含空格的字符串添加到 Tkinter Treeview 列
- javascript - JavaScript如何同时过滤两个数组
- go - 为什么它在复合文字中的换行符之前显示“缺少','
- email - 在 HYBRIS 下单后如何发送多封确认邮件?
- python - 对导入的困惑以及如何使用它
- batch-file - CMD 用户名变量