带有函数参数的 R 函数

Posted

技术标签:

【中文标题】带有函数参数的 R 函数【英文标题】:R function with function argument 【发布时间】:2013-11-02 15:27:00 【问题描述】:

我需要写一个带有函数参数的函数,它会稍微修改函数并返回修改后的函数。

我目前拥有的是

discriminant.functions <- function(priordist1,PC1)

  g1 <- PC1*match.fun(priordist1)
  return(g1)
 

但它不起作用 - 我在调用该函数时收到以下错误消息:

discriminant.functions(function(x1,x2) 36*x1*x2*(1-x1)*(1-x2),0.5)
Error in PC1 * match.fun(priordist1) : 
  non-numeric argument to binary operator

我对R不是很有经验,所以我不知道是否有明显的方法可以做到这一点,看起来它应该很简单。任何帮助表示赞赏,非常感谢!

【问题讨论】:

【参考方案1】:

match.fun用于检查参数是否为函数,这里需要调用函数。直接 func(...) 或像这样使用do.call

 ## use ... for extra func arguments
 discriminant.functions <- 
 function(func,PC1,...)
  match.fun(func)   ## check if func s a function
  function(...) PC1* do.call(func,list(...))

我测试了*函数:

mult2 <- discriminant.functions ("*",2)
mult2(5,4)
[1] 40

【讨论】:

@Caterina,查看outer 的代码可能也很有启发性(只需在控制台上键入“outer”,不带括号)。它展示了如何使用match.fun 来验证您的函数,以及如何以安全的方式将变量提供给您的函数。

以上是关于带有函数参数的 R 函数的主要内容,如果未能解决你的问题,请参考以下文章

传递带有参数的函数作为参数?

如何匹配 R 中函数参数的多种组合?

关于在C语言 声明带有一个变长数组参数的函数

带有 dplyr 的用户定义函数 - 变异列是一个参数

Promise:如何传递带参数的函数? [复制]

将参数传递给函数内的函数