2016-04-10 2 views
1

Есть ли способ извлечь параметры и их соответствующие значения по умолчанию для любой заданной функции от за пределами?Параметры функции извлечения и значения по умолчанию из любой функции

Например, если:

myfunc <- function(a, b = 1) { print(c(a, b)) } 

Я ищу какой-либо функции, возвращающие:

list(a = NULL, b = 1) 

или некоторые их вариации.

+0

Почему вы используете 'NULL' для аргумента« a »? Что было бы результатом для 'function (a, b = 1, c = NULL)'? –

ответ

2

Вы ищете formals().

formals(myfunc) 
# $a 
# 
# 
# $b 
# [1] 1 

Если вам необходимо NULL для a, вы могли бы сделать некоторые проверки. a будет иметь класс «имя» и пуст.

lapply(formals(myfunc), function(x) if(is.name(x) & !nzchar(x)) NULL else x) 
# $a 
# NULL 
# 
# $b 
# [1] 1 
+0

Может использовать 'missing (x)' для обнаружения того, что вы называете «пустым». Возвращает логический. Я предполагаю, что вы сначала попробовали 'is.null' и получили сообщение об ошибке, но' missing' не пытается оценить его аргумент. –

+0

@ 42- - Как вы это понимаете? Если я делаю 'lapply (formals (myfunc), функция (x) отсутствует (x))' Я получаю FALSE для обоих. 'is.null()' также возвращает FALSE для обоих, поскольку 'a' на самом деле не является нулевым, это имя' '' ' –

+0

' myfunc <- function (a, b = 1) {print (missing (a))} ; MyFunc(); # TRUE' Согласен, что это не NULL. 'missing' имеет смысл внутри функции, и я не думаю, что прохождение форматов один за другим с' lapply' дало бы ту же информацию. Если вы измените 'missing' на' is.null' и запустите его, вместо этого вы получите ошибку вместо TRUE. –

Смежные вопросы