Я хотел найти, какая функция в базе R имеет наибольшее количество аргументов.
> objs <- mget(ls("package:base"), inherits = TRUE)
> funs <- Filter(is.function, objs)
Одним из простых способов было использование sapply следующим образом
f_arg_length <- sapply(funs, function(x) length(formals(x)))
f_arg_length[which.max(f_arg_length)]
но я также попытался сделать явный цикл, чтобы сделать то же самое, и мой код был
max_fun_name <- ""
max_fun <- 0
for(x in 1:length(funs)) {
if (length(formals(names(funs[x]))) > max_fun)
{
max_fun <- length(formals(names(funs[x])))
max_fun_name <- names(funs[x])
}
}
max_fun_name
max_fun
Я не могу понять, почему элементы funs передаются в formals () с names () при обращении с индексом (как видно в явном цикле), в то время как то же самое может быть достигнуто без names () при обращении без индекса ( как видно в случае с сапплом). Может кто-нибудь объяснить, почему эти два способа ссылки на одну и ту же вещь приводят к заметным различиям?