В 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?
Отговори:
2 за отговор № 1Съответните редове от 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
, и символ-обект knitr
когато минахме quote(knitr)
.
Най- character.only
аргумент към library()
е това, което използвате, ако искате да преминете низ променлива, чийто стойност е "knitr"
;
str_var <- "knitr"
library(str_var,character.only=TRUE)