在 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 时我们会得到“object knitr not found”,当我们传递 knitr 时我们会得到一个符号对象 quote(knitr)
character.onlylibrary() 参数是您要传递值为 "knitr" 的字符串变量时使用的参数;
str_var <- "knitr"
library(str_var,character.only=TRUE)

关于r - R 中的非字符库调用中有什么类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38621107/

10-12 19:57