r - 为什么使用 sapply 循环时formals() 不需要 names()?
问题描述
我想找出基础 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() 也可以实现相同(如在sapply 的情况)。有人可以解释为什么这两种引用同一事物的方式会产生明显差异的原因吗?
解决方案
推荐阅读
- java - Android 按钮抛出 IllegalStateException
- python - 在 fastapi 中重定向 uri 不匹配
- php - 如何在cs购物车中始终使用主要语言在发票中输出变量{{ p.name }}
- c++ - 如何比较两个结构实例?
- python - 在 Tkinter 搜索文件应用程序中合并文件
- javascript - EventListener 更改错误的标签
- python - 在 discord.py 中记录机器人的设置命令
- string - 散列函数来查看一个字符串是否是另一个字符串的加扰形式/排列?
- amazon-web-services - 通过 Bitbucket Pipelines 从 AWS S3 部署到 AWS EC2
- java - LibGDX 控制多台显示器