如何在R语言中判断用户传入函数的参数数量?
解决方案
要获取传入函数f的参数数量,可直接使用R内置的formals()函数提取形式参数列表,再通过length()获取参数个数。
完整实现代码
myfun = function(f) { numarg = length(formals(f)) if(numarg == 0) { return(doA.cpp(f)) } else { return(doB.cpp(f)) } }
逻辑说明
formals(f)会返回函数f的形式参数集合:- 若
f无参数,返回NULL,length(NULL)的结果为0; - 若
f有1个或多个参数,返回对应参数的pairlist结构,length()的结果即为参数总数。
- 若
- 通过这个判断逻辑,就能自动根据
f的参数数量分支调用对应的Rcpp程序。
调用验证
以下示例会根据f的参数情况自动匹配执行逻辑:
# 无参数函数,触发doA.cpp调用 myfun(f = function() rnorm(10)) # 带单个参数的函数,触发doB.cpp调用 myfun(f = function(m) rnorm(10, m))
内容的提问来源于stack exchange,提问作者Wolfgang Rolke
相关产品推荐
相关产品推荐

