从NESTED函数中的参数中捕获函数(闭包函数)

时间:2014-05-16 01:47:28

标签: r closures

请考虑以下代码段:

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)

感谢。

2 个答案:

答案 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)评估特定环境中捕获的功能。