函数如何在R中返回其名称和参数

时间:2015-05-08 13:53:10

标签: r function arguments

有没有办法从内部获取函数的名称和参数。例如:

> MYFN = function(name='test', num = 5, abool=T){
+ return ("MYFN = function(name='test', num = 5, abool=T)")
+ }
> 
> MYFN()
[1] "MYFN = function(name='test', num = 5, abool=T)"

我想要一个名为getMyHeader()的fn,它应该返回调用它的函数的名称和参数:

> MYFN = function(name='test', num = 5, abool=T){
+  getMyHeader()
+ }
> 
> MYFN()
[1] "MYFN = function(name='test', num = 5, abool=T)"

或者,以下也可能有所帮助:

getMyHeader(MYFN)
[1] "MYFN = function(name='test', num = 5, abool=T)"

1 个答案:

答案 0 :(得分:4)

关键是使用args来获取参数(因为我们从我们感兴趣的函数之外调用它更容易),并用(x)替换参数的名称(即函数的名称)。如果你在函数本身之外这样做,这会更容易。

如果您传递函数名称,则可以创建一个函数或方法来为您生成此函数。

这是一个创建一个名为'header'的泛型的示例,以及一个在为头赋予函数时使用的方法(这可以防止在非函数上意外执行):

header<-function(x){
UseMethod('header',x)
}

header.function <-function(x){
  y<-list(args(x))
  x<-as.character(substitute(x))
  print(sprintf('%s=%s',x,y))
}

进行测试:

myfn<-  function(name='name',num=6,abol='abol'){
  return(name,num,abol)
  }
header(myfn)

返回:

[1] "myfn=function (name = \"name\", num = 6, abol = \"abol\") \nNULL"

请注意转义的引号(这适用于打印)。在顶部,我忘了如何剥离它,但它不应该太困难。

您可以将此功能用于任何功能:

header(glm)

返回:

[1] "glm=function (formula, family = gaussian, data, weights, subset, na.action, start = NULL, etastart, mustart, offset, control = list(...), model = TRUE, method = \"glm.fit\", x = FALSE, y = TRUE, contrasts = NULL, ...) \nNULL"