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