Не совсем уверен, почему вы используете match.call
. Самый простой способ получить аргументы - использовать list(...)
. Это вы также можете использовать в вашем декораторе:
print_arguments <- function(f){
function(...){
d <- sapply(list(...), typeof)
print(d)
return(f(...))
}
}
Я использую sapply
вместо lapply
, поскольку выходные данные могут быть легко преобразованы в вектор, и это дает более чистый вывод.
Вывод:
> foo <- print_arguments(plot)
> foo(iris, pch = 20)
pch
"list" "double"
Примечание
Как отмечено @MrFlick, это не работает, когда декорированная функция использует нестандартную оценку аргумента,Например:
> subset_deco <- print_arguments(subset)
> subset_deco(iris, Sepal.Length > 1)
Error in lapply(X = X, FUN = FUN, ...) : object 'Sepal.Length' not found