几个星期前,我是一名初学者,我正在努力学习这个apply家庭.无法弄清楚如何使用lapply它是疯狂的.是的,我抬头看了?lapply几本书,其中包括R简言之和R食谱,但仍然无法弄清楚我做错了什么.
lapply(X = c("ggplot2", "gtable", "grid"), library)
## Error: 'package' must be of length 1
lapply(X = c("ggplot2", "gtable", "grid"), FUN = function(x) library(x))
## Error: there is no package called 'x'
lapply(X = c("ggplot2", "gtable", "grid"), FUN = library)
## Error: 'package' must be of length 1
x = c("ggplot2", "gtable", "grid")
lapply(x, library)
## Error: 'package' must be of length 1
lapply(x, FUN = function(x) library(x))
## Error: there is no package called 'x'
Run Code Online (Sandbox Code Playgroud)
你lapply()本身没有任何问题,但问题是以library()一种特殊的方式评估它的论点.
这意味着你需要使用
library(pkg.name, character.only=TRUE)
Run Code Online (Sandbox Code Playgroud)
这在以下方面的帮助中相当模糊?library:
package,帮助
名称,作为名称或文字字符串或字符串给出,具体取决于character.only是FALSE(默认值)还是TRUE.
这意味着如果您提供字符串library(),则必须设置character.only为TRUE.
所以,试试这个:
lapply(x, library, character.only=TRUE)
Run Code Online (Sandbox Code Playgroud)
然后你可能想要调用require()而不是library(),并简化结果sapply:
sapply(x, require, character.only=TRUE)
ggplot2 gtable grid
TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
不同之处在于require()返回一个逻辑值,指示包是否已成功加载.