簡體   English   中英

Function 返回帶參數的 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>

我試過使用substituteevalparse ...但我有點困惑。 最好是基礎 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM