几周前我是一名初学者,我正在尝试学习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'
答案 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'的包