4

我是一个初学者,几周前学习了 R,我正在努力学习这个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'
4

2 回答 2

10

lapply()本身没有问题,但问题是library()它以一种稍微特殊的方式评估它的论点。

这意味着您需要使用

library(pkg.name, character.only=TRUE)

这在帮助中相当模糊?library

包,帮助包
的名称,以名称或文字字符串或字符串形式给出,具体取决于 character.only 是 FALSE(默认)还是 TRUE)。

这意味着如果您向 提供字符串library(),则必须设置character.only为 TRUE。

所以,试试这个:

lapply(x, library, character.only=TRUE)

然后你可能想要调用require()而不是library(),并使用 简化结果sapply

sapply(x, require, character.only=TRUE)
ggplot2  gtable    grid 
   TRUE    TRUE    TRUE 

不同之处在于require()返回一个逻辑值,指示包是否加载成功。

于 2013-03-07T14:31:51.953 回答
1

试试这个例如:

 lapply(X = c("ggplot2", "gtable", "grid"), library,character.only =T)

?library

包,帮助包的名称,以名称或文字字符串或字符串形式给出,具体取决于 character.only 是 FALSE(默认)还是 TRUE)。

因此,当您尝试时,例如:

lapply(X = c("ggplot2", "gtable", "grid"), FUN = function(x) library(x))
## Error: there is no package called 'x'

你得到一个错误,因为library 将 x 作为参数并尝试 loa name = 'x' 的包

于 2013-03-07T14:29:37.850 回答