J'ai juste commencé à l'aide de R, et est venu à travers les données.table. Je l'ai trouvé génial.
Une question très naïve: puis-je ignorer les données.cadre d'utilisation des données.table pour éviter la syntaxe de la confusion entre deux paquets?
J'ai juste commencé à l'aide de R, et est venu à travers les données.table. Je l'ai trouvé génial.
Une question très naïve: puis-je ignorer les données.cadre d'utilisation des données.table pour éviter la syntaxe de la confusion entre deux paquets?
À partir des données.tableau FAQ
Comme FAQ 1.1 faits marquants,
j
en[.data.table
est fondamentalement différent dej
en[.data.frame
. Même quelque chose d'aussi simple que deDF[,1]
de casser le code existant dans de nombreux packages et le code de l'utilisateur. C'est par la conception, et nous voulons travailler de cette façon-pour plus d' syntaxe compliquée à travailler. Il y a d'autres différences, trop (voir la FAQ 2.17).En outre,
data.table
héritedata.frame
. C'est undata.frame
, trop. Undata.table
peut être transmis à un paquet seulement acceptedata.frame
et que ce paquet peut utiliser[.data.frame
syntaxe sur l'data.table
.Nous avons proposé des améliorations à R dans la mesure du possible, trop. L'un des de ces a été accepté comme une nouvelle fonctionnalité dans la R version 2.12.0 :
unique()
etmatch()
sont maintenant plus rapide sur le caractère des vecteurs où tous les éléments sont dans le globalCHARSXP
cache et ont banalisé le codage ASCII). Merci à Matthieu Dowle pour suggérer des améliorations à la façon dont le code de hachage est généré enunique.
c.Une deuxième proposition a été d'utiliser des
memcpy
enduplicate.c
, ce qui est beaucoup plus rapide qu'une boucle for dans C. de Cette façon serait d'améliorer la façon de R copies données en interne (sur certaines mesures par 13 fois). Le fil sur la r-devel c'est ici : http://tolstoy.newcastle.edu.au/R/e10/devel/10/04/0148.html.
DT[3]
se réfère à la 3e rangée, maisDF[3]
fait référence à la colonne 3DT[3,] == DT[3],
maisDF[,3] == DF[3]
(un peu prêter à confusion)- Pour cette raison, nous disons que la virgule est facultative dans DT, mais pas en option dans le DF
DT[[3]] == DF[3] == DF[[3]]
DT[i,]
où i est un entier retourne une seule ligne, commeDF[i,]
, mais à la différence d'une matrice ligne unique qui retourne un sous-ensemble vecteur.DT[,j,with=FALSE]
où j est un entier retourne une colonne de données.tableau, contrairement àDF[,j]
qui renvoie un vecteur par défautDT[,"colA",with=FALSE][[1]] == DF[,"colA"]
.DT[,colA] == DF[,"colA"]
DT[,list(colA)] == DF[,"colA",drop=FALSE]
DT[NA]
retourne 1 rangée de NA, maisDF[NA]
renvoie une copie de DF contenant NA tout au long de.- Le symbole
NA
est de type logique dans R, et est donc recyclé en[.data.frame
. L'Intention wasprobablyDF[NA_integer_]
.[.data.table
le fait automatiquement pour des raisons de commodité.DT[c(TRUE,NA,FALSE)]
traite le NA comme FAUX, maisDF[c(TRUE,NA,FALSE)]
retours NA les lignes
pour chaqueNA
DT[ColA==ColB]
est plus simple que d'DF[!is.na(ColA) & !is.na(ColB) & ColA==ColB,]
data.frame(list(1:2,"k",1:4))
crée 3 colonnes,data.table
crée une colonne de la liste.check.names
est par défautTRUE
endata.frame
maisFALSE
endata.table
, pour plus de commodité.stringsAsFactors
est par défaut à TRUE endata.frame
mais FAUX endata.table
, pour plus d'efficacité.- Depuis une chaîne globale de cache a été ajouté à R, les personnages sont les éléments pointeur de la seule mise en cache de la chaîne et il n'est plus un avantage de performance de coverting à la factor.
- Atomique vecteurs dans les colonnes de la liste s'est effondré lors de l'impression à l'aide de ", " dans les données.cadre, mais "," dans les données.table avec une virgule après le 6ème point pour éviter les blessures accidentelles de l'impression des gros objets incorporés.
- En
[.data.frame
nous avons très souvent ensembledrop=FALSE
. Lorsque l'oublions pas, des bugs peuvent survenir dans les cas limites où les colonnes sont sélectionnées et tous les d'un coup, un vecteur est retourné plutôt que d'une seule colonne les données.cadre. En[.data.table
nous avons profité de l'occasion pour faire cohérente et goutte goutte.- Quand un ensemble de données.le tableau est transmis à un ensemble de données.le tableau n'est pas au courant de paquet, paquet, il ne concerne pas l'un de ces différences; il fonctionne, tout simplement
Il y aura probablement des cas où certains paquets, utilisez le code qui tombe lors d'une de données.image, cependant, étant donné qu' data.table
est constamment maintenue pour éviter de tels problèmes, les problèmes qui peuvent survenir sera corrigé rapidement.
Par exemple
À partir de l'ACTUALITÉ pour v 1.8.2
- base: unname(DT) fonctionne à nouveau, en tant que de besoin par plyr::faire fondre(). Grâce à Christoph Jaeckel pour les rapports. Test ajouté.
- Une comme.les données.cadre de la méthode a été ajoutée pour ITime, de sorte que ITime peut être passé à ggplot2 sans erreur, #1713. Grâce à Farrel Buchinsky pour les rapports. Tests ajouté. ITime les étiquettes de l'axe sont toujours affichés en tant que nombre entier de secondes depuis minuit; nous ne savons pas pourquoi ggplot2 ne pas invoquer ITime est comme.caractère de la méthode. Convertir ITime à POSIXct pour ggplot2, est une approche.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.