在 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.only
的 library()
参数是您要传递值为 "knitr"
的字符串变量时使用的参数;str_var <- "knitr"
library(str_var,character.only=TRUE)
关于r - R 中的非字符库调用中有什么类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38621107/