web-dev-qa-db-fra.com

Quels sont les doubles-points (: :) dans R?

Je suis en train de suivre un tutoriel dans Rbloggers et j'ai trouvé l'utilisation de deux points, j'ai regardé en ligne, mais je n'ai pas trouvé d'explication pour leur utilisation. Voici un exemple de leur utilisation.

df <- dplyr::data_frame(
  year = c(2015, NA, NA, NA), 
  trt = c("A", NA, "B", NA)
)

Je comprends que cela crée un bloc de données, mais je ne comprends pas leur objectif.

17
Luis Candanedo

Comme vous avez probablement déjà consulté la page d'aide, l'utilisation de :: permet d'accéder à la fonction exacte à partir de ce package spécifique. Lorsque vous chargez dplyr, vous obtenez probablement un message comme suit.

The following objects are masked from ‘package:base’:
       intersect, setdiff, setequal, union

Ainsi, par exemple, si vous souhaitez utiliser la fonction intersect à partir de dplyr ou du package de base, vous devez spécifier à l'aide de :: deux-points. L'utilisation sera la suivante

mtcars$model <- rownames(mtcars)
first <- mtcars[1:20, ]
second <- mtcars[10:20, ]
dplyr::intersect(first, second)
base::intersect(first, second)

Mise à jour: Ajout d'explications supplémentaires

Remarque: La séquence de chargement des bibliothèques détermine l'accès préférentiel aux fonctions spécifiques. Les développeurs de packages différents ont tendance à utiliser les mêmes noms de fonction. Cependant, lorsque R rencontre une fonction, il parcourt les différentes bibliothèques que la session particulière a chargées de manière séquentielle. Vous pouvez vérifier les packages d'une session en exécutant (.packages())

 [1] "tidyr"      "data.table" "dplyr"      "stats"     
 [5] "graphics"   "grDevices"  "utils"      "datasets"  
 [9] "methods"    "base"    

Comme vous pouvez le voir dans mon exemple de session ci-dessus, tidyr est la dernière bibliothèque que j'ai chargée, qui est la première entrée de la session r. Ainsi, lorsque vous utilisez une fonction dans votre code, elle est d'abord recherchée dans tidyr -> puis data.table -> puis dplyr et ainsi de suite, enfin le package base est recherché. Donc, dans ce processus, quand il y a des chevauchements de noms de fonctions entre les packages, celui qui a chargé les derniers masque les précédents. Pour éviter ce masquage, vous spécifiez dans le code R où chercher la fonction. Par conséquent, ici base::intersect, utilisera la fonction de la bibliothèque de base au lieu de dplyr. Alternativement, vous pouvez utiliser pour éviter de charger la bibliothèque complète. Il y a des points positifs et négatifs avec cela. Lisez les liens et apprenez-en plus.

exécuter et vérifier les différences. Voici quelques ressources pour vous faire comprendre.

Comparer la bibliothèque (), require (), ::

Espace de noms

27
user5249203

Il peut y avoir plusieurs fonctions portant le même nom dans plusieurs packages. L'opérateur à deux points vous permet de spécifier la fonction spécifique que vous souhaitez:

package::functionname
10
CPhil