在 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/