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

> 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,该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)"

最佳答案

关键是使用args来获取参数(因为我们从感兴趣的函数外部调用它更容易),并使用replace(x)提取参数的名称(即函数的名称)。如果您在函数本身之外执行此操作,则会更容易。

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

这是一个创建名为“header”的泛型的示例,以及为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"

10-05 22:47
查看更多