R中的包装函数

时间:2017-06-27 14:46:03

标签: r wrapper

任何人都可以帮我理解r中的包装函数是什么吗?如果您能够在构建自己的包装函数以及何时使用它的示例的帮助下解释它,我将非常感激。

提前致谢。

2 个答案:

答案 0 :(得分:12)

假设我想使用mean(),但我想设置一些默认参数,当我实际调用mean()时,我的用例不允许我添加其他参数。

我可以创建一个包装函数:

mean_noNA <- function(x) {
    return(mean(x, na.rm = T))
}

mean_noNAmean()的包装器,我们将na.rm设置为TRUE。

现在我们可以使用与mean_noNA(x)相同的mean(x, na.rm = T)

答案 1 :(得分:0)

Wrapper functions以任何编程语言出现,它们只是意味着您正在将一个函数“包装”在另一个函数内,从而以某种有用的方式改变了它的工作方式。当我们提到“包装器”功能时,是指该功能的主要目的是调用某些内部功能。包装器中可能会有一些更改或其他计算,但这很小,以至于原始功能构成了大部分计算。

作为示例,考虑以下logR函数的包装函数。原始功能的缺点之一是,它对于负数值输入无法正常工作(它向NaN发出警告消息)。我们可以通过创建一个将其转换为complex logarithm的“包装器”函数来对此进行补救:

Log <- function(x, base = exp(1)) {
  LOG <- base::log(as.complex(x), base = base)
  if (all(Im(LOG) == 0)) { LOG <- Re(LOG) }
  LOG }

函数Loglog的“包装器”,可以对其进行调整,以使其现在可以接受数字或复数输入,包括负数字输入。如果它收到非负数字或复数输入,则它会为原始log函数提供相同的输出。但是,如果给定的是负数值输入,则会给出应该由复数对数返回的复数输出。