R 如何在函数的装饰器中访问函数的参数?
我想编写一个decorator来轻松打印在R中给定给函数的所有参数的类型 到目前为止,我成功地为自己编写了这样的代码,但我希望避免将其复制粘贴到所需的函数中R 如何在函数的装饰器中访问函数的参数?,r,decorator,R,Decorator,我想编写一个decorator来轻松打印在R中给定给函数的所有参数的类型 到目前为止,我成功地为自己编写了这样的代码,但我希望避免将其复制粘贴到所需的函数中 fun <- function(...){ c = as.list(match.call()) d= lapply(c, print(typeof)) print(d)} fun不完全确定为什么要使用match.call。获取参数的最简单方法是使用list(…)。这也可以在装饰
fun <- function(...){
c = as.list(match.call())
d= lapply(c, print(typeof))
print(d)}
fun不完全确定为什么要使用match.call
。获取参数的最简单方法是使用list(…)
。这也可以在装饰器中使用:
print_arguments <- function(f){
function(...){
d <- sapply(list(...), typeof)
print(d)
return(f(...))
}
}
注意
正如@MrFlick所指出的,当修饰函数使用非标准参数求值时,这不起作用。例如:
> subset_deco <- print_arguments(subset)
> subset_deco(iris, Sepal.Length > 1)
Error in lapply(X = X, FUN = FUN, ...) : object 'Sepal.Length' not found
>subset_deco subset_deco(鸢尾,萼片长度>1)
lappy中出错(X=X,FUN=FUN,…):找不到对象“sepa.Length”
如果函数依赖于非标准评估,这将导致一些问题。例如subset(mtcars,cyl==6)
工作得很好,但是foo我使用了match.call,因为这是我找到的第一种获取函数参数的方法。“…”是获取它所在函数的参数的短方法,对吗?我找不到任何文档,也不知道如何查找。谢谢你的回答!今天晚些时候我会试试。@flick先生,你说得对。要让这项工作发挥作用将是一个相当大的挑战;我真的看不到解决办法。我会考虑一下,同时给我的答案加上一个警告。这个解决方案似乎对我不起作用。我使用的Testfunction很有趣
> foo <- print_arguments(plot)
> foo(iris, pch = 20)
pch
"list" "double"
> subset_deco <- print_arguments(subset)
> subset_deco(iris, Sepal.Length > 1)
Error in lapply(X = X, FUN = FUN, ...) : object 'Sepal.Length' not found