88 votes

Quelle est l'astuce R la plus utile ?

Afin de partager quelques conseils et astuces supplémentaires pour R Quelle est votre fonction ou votre astuce la plus utile ? Une vectorisation intelligente ? Entrée/sortie de données ? Visualisation et graphiques ? L'analyse statistique ? Les fonctions spéciales ? L'environnement interactif lui-même ?

Un article par poste, et nous verrons si nous avons un gagnant par le biais des votes.

[Edit 25-Aug 2008] : Donc, après une semaine, il semble que la simple str() a remporté le scrutin. Comme j'aime moi-même le recommander, c'est une réponse facile à accepter.

8 votes

@Dirk : "wiki communautaire" signifie "propriété de la communauté", ce n'est pas un synonyme de "question de sondage". N'écoutez pas la police des wikis communautaires.

4 votes

Envisager meta.stackexchange.com/questions/11740/ il devrait être CW.

8 votes

Encore de l'intimidation de la part de CW. Je vais voir votre méta-SO et vous relancer : meta.stackexchange.com/questions/392/

64voto

hadley Points 33766

str() vous indique la structure de tout objet.

0 votes

Python utilise dir() - est plus logique.

17 votes

Ah, str est également l'abréviation de string dans de nombreuses langues.

0 votes

Pourquoi pas ? class() ? Elle semble révéler le même type d'information. Pourquoi y a-t-il deux commandes aussi similaires ?

64voto

juba Points 15701

Une fonction très utile que j'utilise souvent est dput(), qui vous permet de vider un objet sous la forme de code R.

# Use the iris data set
R> data(iris)
# dput of a numeric vector
R> dput(iris$Petal.Length)
c(1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 
1.4, 1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1, 1.7, 1.9, 
1.6, 1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 1.2, 1.3, 1.4, 
1.3, 1.5, 1.3, 1.3, 1.3, 1.6, 1.9, 1.4, 1.6, 1.4, 1.5, 1.4, 4.7, 
4.5, 4.9, 4, 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5, 4.2, 4, 4.7, 
3.6, 4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4, 4.9, 4.7, 4.3, 4.4, 4.8, 
5, 4.5, 3.5, 3.8, 3.7, 3.9, 5.1, 4.5, 4.5, 4.7, 4.4, 4.1, 4, 
4.4, 4.6, 4, 3.3, 4.2, 4.2, 4.2, 4.3, 3, 4.1, 6, 5.1, 5.9, 5.6, 
5.8, 6.6, 4.5, 6.3, 5.8, 6.1, 5.1, 5.3, 5.5, 5, 5.1, 5.3, 5.5, 
6.7, 6.9, 5, 5.7, 4.9, 6.7, 4.9, 5.7, 6, 4.8, 4.9, 5.6, 5.8, 
6.1, 6.4, 5.6, 5.1, 5.6, 6.1, 5.6, 5.5, 4.8, 5.4, 5.6, 5.1, 5.1, 
5.9, 5.7, 5.2, 5, 5.2, 5.4, 5.1)
# dput of a factor levels
R> dput(levels(iris$Species))
c("setosa", "versicolor", "virginica")

Il peut être très utile d'afficher des morceaux de données facilement reproductibles lorsque vous demandez de l'aide, ou pour modifier ou réorganiser les niveaux d'un facteur.

42voto

Rob Hyndman Points 10068

Head() et tail() pour obtenir la première et la dernière partie d'un cadre de données, d'un vecteur, d'une matrice, d'une fonction, etc. En particulier avec les grands cadres de données, c'est un moyen rapide de vérifier que le chargement est correct.

38voto

Dirk Eddelbuettel Points 134700

Une fonctionnalité intéressante : La lecture des données utilise connexions qui peuvent être des fichiers locaux, des fichiers distants accessibles via http, des tuyaux provenant d'autres programmes ou autres.

À titre d'exemple simple, considérons cet accès pour N=10 entiers aléatoires entre min=100 et max=200 à partir de random.org (qui fournit de véritables numéros aléatoires basés sur le bruit atmosphérique plutôt qu'un générateur de numéros pseudo-aléatoires) :

R> site <- "http://random.org/integers/"         # base URL
R> query <- "num=10&min=100&max=200&col=2&base=10&format=plain&rnd=new"
R> txt <- paste(site, query, sep="?")            # concat url and query string
R> nums <- read.table(file=txt)                  # and read the data
R> nums                                          # and show it
   V1  V2
1 165 143
2 107 118
3 103 132
4 191 100
5 138 185
R>

Soit dit en passant, le au hasard fournit plusieurs fonctions pratiques pour accéder aux random.org .

0 votes

BTW-- Je suggère que vous debe Les auto-réponses sont CW si (1) vous les postez rapidement et (2) vous ne rendez pas la question CW. Sinon, on a l'impression que vous essayez de jouer avec le système des représentants. YMMV et tout ça.

1 votes

Il ne s'agit pas de jouer avec le système, mais juste de faire démarrer les choses. Il est toujours libre d'accepter toute autre réponse.

2 votes

@ars : Il est libre d'accepter celle-ci. Je ne vais pas non plus essayer de le forcer à la mettre sur wiki s'il ne suit pas mon conseil. Mais je ne posterai pas une auto-réponse préparée sans la marquer wiki, et je ne voterai pas pour une réponse sans cela non plus. Prenez ça pour ce que ça vaut.

35voto

Gavin Simpson Points 72349

Je trouve que j'utilise with() y within() de plus en plus. Pas plus $ qui jonchent mon code et on n'a pas besoin de commencer à attacher des objets au chemin de recherche. Plus sérieusement, je trouve with() etc. font de la intention de mes scripts d'analyse de données beaucoup plus claire.

> df <- data.frame(A = runif(10), B = rnorm(10))
> A <- 1:10 ## something else hanging around...
> with(df, A + B) ## I know this will use A in df!
 [1]  0.04334784 -0.40444686  1.99368816  0.13871605 -1.17734837
 [6]  0.42473812  2.33014226  1.61690799  1.41901860  0.8699079

with() met en place un environnement dans lequel l'expression R est évaluée. within() fait la même chose mais vous permet de modifier l'objet de données utilisé pour créer l'environnement.

> df <- within(df, C <- rpois(10, lambda = 2))
> head(df)
           A          B C
1 0.62635571 -0.5830079 1
2 0.04810539 -0.4525522 1
3 0.39706979  1.5966184 3
4 0.95802501 -0.8193090 2
5 0.76772541 -1.9450738 2
6 0.21335006  0.2113881 4

Quelque chose que je n'ai pas réalisé quand j'ai utilisé pour la première fois within() c'est que vous devez effectuer une affectation dans le cadre de l'expression évaluée. y assigner l'objet retourné (comme ci-dessus) pour obtenir l'effet désiré.

Prograide.com

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.

Powered by:

X