R中的非字符库调用中有哪些类?

时间:2016-07-27 18:57:49

标签: r

在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如何处理这个?

1 个答案:

答案 0 :(得分:2)

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(),我们就会得到&#34;找不到对象编织者&#34;当我们通过knitr时,我们通过knitr和符号对象quote(knitr)

如果要传递character.only的字符串变量,则library()的{​​{1}}参数就是您使用的;

"knitr"