gpt4 book ai didi

r - 评估 switch 语句中的匿名函数

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

假设我有这样的代码:

tmp <- switch("b",
a = print("foo"),
b = function() paste("I want to evaluate this one!"),
stop("say what now?")
)

现在,如果我输入 tmp我得到一个未评估的函数,因此我必须在之后添加一对括号才能评估它:

tmp
## function() paste("I want to evaluate this one!")
tmp()
## [1] "I want to evaluate this one!"

当然,我可以预定义这个函数并在switch内传递它(在这种情况下它不是匿名的),但我想知道在 switch 内评估匿名函数是否可能和/或合理声明。

最佳答案

我想可以安排 do.call() 来调用匿名函数:

tmp <- switch("b",
a = print("foo"),
b = do.call(function() paste("I want to evaluate this one!"),
list()),
stop("say what now?")
)

例如:

> tmp
[1] "I want to evaluate this one!"
<小时/>

编辑上面的一个更简单的版本是:

tmp <- switch("b",
a = print("foo"),
b = (function() paste("I want to evaluate this one!"))(),
stop("say what now?")
)

因此,在第一组括号中创建了匿名函数,并通过附加第二组 () 来调用生成的函数。

<小时/>

但对我来说,将匿名函数转换为命名函数并调用它似乎更干净:

foo <- function() paste("I want to evaluate this one!")
tmp <- switch("b",
a = print("foo"),
b = foo(),
stop("say what now?")
)

最终结果相同:

> tmp
[1] "I want to evaluate this one!"

如果这一切都在函数内,则可以内联定义foo(),因此它仅在外部函数调用执行期间存在。

关于r - 评估 switch 语句中的匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5118263/

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