Почему Forms () не требует names () при цикле с sapply? - PullRequest
0 голосов
/ 15 мая 2018

Я хотел найти, какая функция в базе 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 () при обращении без индекса ( как видно в случае с сапплом). Может кто-нибудь объяснить, почему эти два способа ссылки на одну и ту же вещь приводят к заметным различиям?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...