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