R中的函数组成:从闭包扩展示例

时间:2019-02-08 23:35:33

标签: r function

我正在尝试创建一个从Wickham's example on closures开始的函数组成的简约示例

这有效:

power <- function(exponent, base_f) {
  base_f <-   function(x) {
    x ^ exponent
  }  
  base_f
  }

square <- power(exponent = 3)
square(x = 2)

但这不是:

base_f <-   function(x) {   
  x ^ exponent 
}  

power <- function(exponent, base_f) {     
  res1 <- base_f(x)     
  return(res1)   
}


square <- power(exponent = 3) 
square(x = 2)

为什么?

我正在寻找一种将两个功能分开的解决方案。

1 个答案:

答案 0 :(得分:0)

第二个示例中存在三个问题。

首先,power指的是x,但未定义。您想要res <- base_f, 不是res <- base_f(x)

第二,请注意R使用词法作用域。这意味着,当在函数中引用变量并且该变量先前也未在该函数中定义时,它将查找该函数的词法环境,即查找定义的环境。 -不是调用该函数的环境。

在第二个示例中,base_f将不会查看power的{​​{1}},而是会查看全局环境,因为这是定义exponent的词法环境。复制base_f,并将其环境设置为base_f中的当前环境。

第三,在代码末尾调用power时,缺少第二个参数。

进行这些更改即可。我们已经用##标记了更改的行或新的行。

power