无法弄清楚lapply中的错误

koe*_*bro 3 r apply lapply

几个星期前,我是一名初学者,我正在努力学习这个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)

And*_*rie 9

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()返回一个逻辑值,指示包是否已成功加载.