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

rns*_*nso 5 arguments r function

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

> 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)"
Run Code Online (Sandbox Code Playgroud)

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

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

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

getMyHeader(MYFN)
[1] "MYFN = function(name='test', num = 5, abool=T)"
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 4

关键是使用 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))
}
Run Code Online (Sandbox Code Playgroud)

去测试:

myfn<-  function(name='name',num=6,abol='abol'){
  return(name,num,abol)
  }
header(myfn)
Run Code Online (Sandbox Code Playgroud)

返回:

[1] "myfn=function (name = \"name\", num = 6, abol = \"abol\") \nNULL"
Run Code Online (Sandbox Code Playgroud)

请注意转义的引号(这有利于打印)。从顶部开始,我忘记了如何将其剥离,但这应该不会太困难。

您可以将其与任何函数一起使用:

header(glm)
Run Code Online (Sandbox Code Playgroud)

返回:

[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"
Run Code Online (Sandbox Code Playgroud)