2015-02-28 5 views
0

Как мне получить (потенциально незаполненное) значение аргумента при вызове функции? Я пытаюсь получить информацию, если linout является истинным или ложным для установленной модели nnet.Получить значение аргумента из вызова функции

Пример:

library(nnet) 
df <- data.frame(a = runif(10), b = runif(10), c = runif(10) > .5) 
fit <- nnet(c ~ ., data = df, size = 3) 
fit$call 
> nnet.formula(formula = c ~ ., data = df, size = 3) 

Вот я знаю, что linout является FALSE, как это значение по умолчанию. Но также может быть что-то вроде:

nnet.formula(formula = c ~ ., data = df, size = 3, lin = T) 

Здесь, я должен был бы сделать некоторые частичное соответствие с lin до linout и получить T

+0

если лин = TRUE, был дан, то он будет показывать в $ call. как насчет 'formals (nnet.default) $ linout' – rawr

+0

@rawr: Я думаю, что это будет рассматривать только определение функции, а не вызов, который был сделан для этой функции. –

ответ

1

Есть (по крайней мере) два Nnet-методы. Вы используете метод формулы и предоставляете аргумент для строки с использованием частичного соответствия. Это испытает ли началось с «лин» любое из имен аргументов:

fit <- nnet(c ~ ., data = df, size = 3, lin=TRUE) 
# weights: 13 
# snipped output 
fit$call 
nnet.formula(formula = c ~ ., data = df, size = 3, lin = TRUE) 
as.logical(max(unlist(lapply(names(fit$call), grep, patt="lin")))) 
#[1] TRUE 

Это интересно посмотреть, как lapply обрабатывает вызов-объекты:

> fit$call 
nnet.formula(formula = c ~ ., data = df, size = 3, lin = FALSE) 
> lapply(fit$call, class) 
[[1]] 
[1] "name" 

$formula 
[1] "call" 

$data 
[1] "name" 

$size 
[1] "numeric" 

$lin 
[1] "logical" 
Смежные вопросы