gpt4 book ai didi

r - 将 map() .x 传递给函数

转载 作者:行者123 更新时间:2023-12-05 03:29:04 26 4
gpt4 key购买 nike

这似乎是一个愚蠢的问题,但对于我来说我无法弄明白,所以感谢您的帮助。

我正在尝试将 .x(来自 purrr::map)传递给一个函数,所以最后我得到一个函数列表(我最终将使用它来传递一个包含函数的列定义列表以响应)。这是我想做的一个非常基本的例子:

a = list("b", "c")

t <- map(a, ~{
function(.x){
print(x)
}
})

我要找的结果是:

> t
[[1]]
function(b){
print(x)
}

[[2]]
function(c){
print(x)
}

但我得到:

> t
[[1]]
function(.x){
print(x)
}

[[2]]
function(.x){
print(x)
}

我正在寻找的是可能的吗?

最佳答案

您可以通过使用包装函数创建一个新函数来获得您想要的。在包装器中,创建一个空函数,将 args 设置为传入的值 x(因此如果 x="a",则给出等同于 alist (a=)), 然后也解析一个字符串到正文。那么返回的列表就是你想要的函数。

library(purrr)

function_crafter <- function(x) {
f <- function() {}
args <- setNames(list(bquote()), x)
formals(f) <- args
body(f) <- parse(text = paste0("print(", x, ")"))
f
}

a <- list("b", "c")

fl <- map(a, function_crafter)

fl[[1]](b=2)
#> [1] 2
fl[[2]](c=39)
#> [1] 39

fl
#> [[1]]
#> function (b)
#> print(b)
#> <environment: 0x7fb68752aae0>
#>
#> [[2]]
#> function (c)
#> print(c)
#> <environment: 0x7fb687552818>

如果您真的希望每个函数中的 print() 只是 print(x) 而不是 print(b)print(c),那就更简单了,只需要在初始化的时候定义函数体即可。

关于r - 将 map() .x 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71090272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com