[英]Error in debugonce function in Rstudio, it returns - argument must be a function
[英]Function that returns function with argument
當創建一個 function 應該返回一個包含原始 function 的參數的 function 時,我應該如何 go?
例如考慮這個 function:
a <- function(value){
function(x) x + value
}
我希望它在生成的 function 中返回我在參數中指定的值,如下所示:
b <- a(3)
#> b
#> function(x) x + 3
然后能夠使用生成的 function b
:
b(2)
#[1] 5
相反,我得到:
> b
function(x) x + value
<environment: 0x000002254f80a758>
我試過使用substitute
、 eval
、 parse
...但我有點困惑。 最好是基礎 R 解決方案。
正如我在評論中討論的那樣,問題中顯示的 function 已經有效,因此實際上並不需要下面的方法,但如果您想創建一個 function 並將 value 的value
硬編碼到其中,那么可以使用其中一種方法。 沒有使用包。
1) do.call/替換
a <- function(value, envir = parent.frame()) {
f <- function(x) x + value
body(f) <- do.call("substitute", list(body(f), list(value = value)))
environment(f) <- envir
f
}
b <- a(3)
b
## function (x)
## x + 3
b(4)
## [1] 7
lapply(1:3, a, envir = environment())
給予:
[[1]]
function (x)
x + 1L
[[2]]
function (x)
x + 2L
[[3]]
function (x)
x + 3L
2) strings另一種可能性是使用字符串替換:
a2 <- function(value, envir = parent.frame()) {
eval(parse(text = gsub("\\bvalue\\b", value, "function(x) x + value")), envir)
}
lapply(1:3, a2, envir = environment())
給予:
[[1]]
function(x) x + 1
[[2]]
function(x) x + 2
[[3]]
function(x) x + 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.