在R中,我们可以使用以下方式加载包:
library(knitr)
或者
library("knitr")
在中?library
,该参数可以是字符或名称。然而:
is.name(knitr)
Error: object 'knitr' not found
class(knitr)
Error: object 'knitr' not found
当一个包包含一个函数,该函数也是该包的名称时,这也会使情况复杂化:
library(data.table)
class(data.table)
[1] "function"
library(data.table) #returns nothing
不知何故,它不知道将函数传递给data.table
库函数,而是将其解释为加载程序包的调用(我认为)。R如何处理?
相关library()
话语
if (!character.only)
package <- as.character(substitute(package))
我们可以制作自己的小功能(library()
很复杂!)来探讨其工作原理:
tmpf <- function(x) {
str(substitute(x))
}
tmpf(knitr)
## symbol knitr
我们可以使用quote()
以下方法进行等效处理:
str(quote(knitr))
## symbol knitr
但是tmpf()
由于substitute()
调用,将其传递给它并不能保留其形式:
tmpf(quote(knitr))
## language quote(knitr)
如果我们把eval(substitute(x))
进入tmpf()
,我们会得到“对象knitr找不到”当我们路过knitr
,符号对象knitr
时,我们通过quote(knitr)
。
该character.only
给的说法library()
是,如果你想传递一个字符串变量,它的你用什么价值的"knitr"
;
str_var <- "knitr"
library(str_var,character.only=TRUE)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句