为什么在使用sapply进行循环时,formals()不需要name()?

时间:2018-05-15 20:06:51

标签: r

我想找到基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

我无法理解为什么在使用index(如显式循环中所示)时使用names()在formals()中传递元素的元素,而在没有索引的情况下引用时可以在没有names()的情况下实现相同的元素(如在sapply的情况下所见)。有人可以解释为什么这两种引用同一事物的方式会产生明显的差异吗?

0 个答案:

没有答案