无法弄清楚lapply中的错误

时间:2013-03-07 14:22:44

标签: r apply lapply

几周前我是一名初学者,我正在尝试学习apply家庭。无法弄清楚如何使用lapply并且它正在疯狂。是的,我查了?lapply和几本书,包括R in a nutshellR cookbook,但仍然无法弄清楚我做错了什么。

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'

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分: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作为参数并尝试使用name ='x'的包