请考虑以下代码段:
f = function(y) function() y()
f(version)()
f(版本)()出错:找不到函数" y"
P.S。似乎闭包机制与C#Lambda完全不同。 (?)
问:如何在闭包中捕获函数?
- 编辑 -
场景:实际上,我想写一个函数工厂,我不想在嵌套函数中添加参数。
像这样:
theme_factory = function(theme_fun)
{
function(device)
{
if (!is.onMac()) # Not Mac
{
(device == "RStudioGD") %?% theme_fun(): theme_fun(base_family="Heiti")
}
else
{
theme_fun(base_family="STHeiti")
}
}
}
我为ggplot定义了两个自定义主题函数
theme_bw_rmd = theme_factory(theme_bw)
theme_grey_rmd = theme_factory(theme_grey)
然后我用它们像:
function(device)
ggplot(data) + geom_point() something like that + theme_bw_rmd(device)
感谢。
答案 0 :(得分:0)
所以问题在于传递参数?这样的事情怎么样:
alwaysaddone <- function(f) function(...) f(...)+1
biggersum <- alwaysaddone(sum)
sum(1:3)
# 6
biggersum(1:3)
# 7
您可以使用...
来传递&#34;传递&#34;你喜欢的任何参数。
答案 1 :(得分:0)
使用eval(func, envir = list(... captured parameters))
或substitute(func, envir)
评估特定环境中捕获的功能。