Я хочу применить функцию к списку моделей. Я хотел бы организовать вывод, указав название модели перед ее выходом. Вот (очень) упрощенный пример использования match.call()
на основе this r-help thread:Получить аргументы из списка, переданного функции внутри функции
x <- rnorm(10)
y <- rnorm(10)
mod <- lm(y~x)
fun <- function(model){
name <- as.character(match.call()[[2]])
p <- summary(model)$coefficients[2,4]
return(paste(name, "; p =", p))
}
Если я кормить его одной модели, она отлично работает:
> fun(model=mod)
[1] "mod ; p = 0.901618595026321"
Но если применить его к списку, по имени или нет, это не работает:
> lapply(list(mod, mod), fun)
[[1]]
[1] "[[ ; p = 0.901618595026321" "X ; p = 0.901618595026321"
[3] "i ; p = 0.901618595026321"
[[2]]
[1] "[[ ; p = 0.901618595026321" "X ; p = 0.901618595026321"
[3] "i ; p = 0.901618595026321"
> lapply(list(modA=mod, modB=mod), fun)
$modA
[1] "[[ ; p = 0.901618595026321" "X ; p = 0.901618595026321"
[3] "i ; p = 0.901618595026321"
$modB
[1] "[[ ; p = 0.901618595026321" "X ; p = 0.901618595026321"
[3] "i ; p = 0.901618595026321"
Для ясности, что я хочу:
[[1]]
[1] "modA ; p = 0.901618595026321"
[[2]]
[1] "modB ; p = 0.901618595026321"
Шаг через 'lapply' кода после выполнения' отладки (удовольствие) '- вы увидите, что' match.call() [[2]] '' дает X [[я]] 'независимо - имена не передаются или не известны внутренним функциям функции. – thelatemail
@thelatemail, это правда. Я пытаюсь понять, как получить имена, которые будут переданы и известны внутренним функциям функции. – gung
Я думаю, что ответ Ландау ниже - самый разумный метод. – thelatemail