有没有办法从自身内部获取函数的名称和参数。例如:
> 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"