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

在R中我们可以加载包:

library(knitr)

要么

library("knitr")

在?库中,它表示该参数可以是字符或名称.然而:

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

最佳答案 库()的相关行说

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时会得到“找不到对象编织器”,而当我们传递quote(knitr)时,我们会得到符号对象编织器.

如果要传递值为“knitr”的字符串变量,则使用library()的character.only参数.

str_var <- "knitr"
library(str_var,character.only=TRUE)
点赞