我是一个初学者,几周前刚学会了R,正在尝试学习apply家族。不知道如何使用lapply,它让人抓狂。是的,我查阅了?lapply和包括R in a nutshell和R 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'发布于 2013-03-07 22:31:52
您的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-07 22:29:38
例如,请尝试执行以下操作:
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‘的包
https://stackoverflow.com/questions/15273635
复制相似问题