/ / Quelle classe se trouve dans un appel de bibliothèque sans personnage dans R? - r

Quelle classe se trouve dans un appel de bibliothèque sans caractère dans R? - r

En R, nous pouvons charger des paquets avec:

library(knitr)

ou

library("knitr")

Dans ?library, il dit que cet argument peut être un caractère ou un nom. Toutefois:

is.name(knitr)
Error: object "knitr" not found
class(knitr)
Error: object "knitr" not found

Cela complique également les choses quand un paquet contient une fonction qui est aussi le nom du paquet:

library(data.table)
class(data.table)
[1] "function"
library(data.table) #returns nothing

D'une certaine manière, il sait ne pas passer la fonction data.table dans la fonction de bibliothèque, mais interprète plutôt comme un appel pour charger le paquet (je pense). Comment R gère-t-il cela?

Réponses:

2 pour la réponse № 1

Les lignes pertinentes de library() dire

if (!character.only)
package <- as.character(substitute(package))

Nous pouvons créer notre propre petite fonction (library() c'est compliqué!) d'explorer comment cela fonctionne:

tmpf <- function(x) {
str(substitute(x))
}
tmpf(knitr)
## symbol knitr

Nous pouvons faire une chose équivalente en utilisant quote():

str(quote(knitr))
## symbol knitr

Mais en le passant à tmpf() ne conserve pas sa forme, à cause de la substitute() appel:

tmpf(quote(knitr))
## language quote(knitr)

Si nous devions mettre eval(substitute(x)) dans tmpf(), nous aurions "objet knitr not found" quand nous aurions passé knitret un objet-symbole knitr quand on est passé quote(knitr).

le character.only argument à library() est ce que vous utilisez si vous voulez passer une variable de chaîne dont valeur est "knitr";

str_var <- "knitr"
library(str_var,character.only=TRUE)