對于給定的節點向量,例如,nodes = 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
期望這會回傳一個函式但回傳 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 包(v2.0.1)于 2021 年 11 月 6 日創建
可以看出,上述方法沒有按預期作業。誰能以矢量化的方式解釋如何使其作業?
uj5u.com熱心網友回復:
現在你沒有回傳一個函式。為了創建一個新函式,您應該看到function關鍵字。這也是您定義引數的地方。它應該看起來像
prod_x <- function(nodes){
function(x) {
prod(x - nodes)
}
}
這適用于一個,x但prod()會將多個值x合并為一個結果。如果您希望您的函式被矢量化x,那么您還可以添加
prod_x <- function(nodes){
Vectorize(function(x) {
prod(x - nodes)
})
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/351290.html
