1. Grâce à ce formulaire vous pouvez proposer une astuce ou un script sur R.
  2. Votre script doit pouvoir être lancé en l'état. Veuillez penser à :
    • inclure le chargement des "library" nécessaires
    • construire un petit jeu de données si besoin est.
    • commenter les lignes de codes pour en faciliter la compréhension.
  3. Le titre de votre script ou astuce doit être clair et explicite.
  4. Pensez à mettre votre code entre les balises [R] et [/R]; Pour cela, vous pouvez utiliser le bouton

Vous pouvez utiliser vos comptes Facebook, twitter ou google pour vous identifer (google est compatible yahoo, openID...)
L'ideal étant de vous connecter si vous avez un compte utilisateur, ou faire une demande de compte utilisateur si vous n'en avez pas encore.
Créer un compte va vous permettre de pouvoir éditer vos codes et de mettre en avant votre site internet.
Sinon vous pouvez soumettre anonymement en remplissant les champs ci-après.







Choisissez les catégories correspondantes à votre Code:

  • algorithmique
  • Analyse de survie
  • base indispensable
  • bayésien
  • configuration de R
  • exportation de données
  • fonctions utiles
  • graphique
  • importation de données
  • inférence
  • manipulation de données
  • message d'erreur
  • modélisation
  • Non classé
  • optimisation
  • planification
  • programmer avec R
  • regression linéaire
  • sig - cartographie
  • Test
  • tidyverse
  • Transformation de données


Votre recherche:

Comment faire une boucle repeat avec R ? repeat

0
dans fonctions utiles
- ça ne sert à rien -- c\'est interessant - (pas encore de vote)
Loading...

 
 
i <- 0
repeat {
     i <- i + 1;
     print(i);
     if (i >= 10) break;
}
 
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
 

Proposé par Helene F.

Pas encore de commentaire, cliquez ici pour réagir.

Comment faire une boucle While avec R ?

1
dans algorithmique, base indispensable
- ça ne sert à rien -- c\'est interessant - (score de +21 sur 23 votes)
Loading...
i<-0
 
while (i<10){ 
 
print(i)
 
i<-i+1  
 
} 
 
print("on sort de la boucle")

While va réaliser ce qui est écrit entre les accolades {} tant que ce qui est dans les parenthèses () est vrai. Ce code peut donc se traduire de la façon suivante :

i vaut 0 
 
tant que (i est inférieur à 0){ 
 
afficher i 
 
augmenter i de 1
 
}

Dans cet exemple au moment où i vaudra 10, on sortira de la boucle.

Proposé par Vincent.

1 commentaire. Cliquez ici pour réagir.

Comment faire une boucle for avec R ?

11
dans algorithmique, base indispensable
- ça ne sert à rien -- c\'est interessant - (score de +46 sur 46 votes)
Loading...
for ( i in 1:10) { 
 
print(i) 
 
}

Cette commande peut se traduire par :
Pour (i allant de 1 à 10) 
 
{ affiche i}

Il faut noter que les parenthèses () servent à définir la variable et les valeurs qu’elle va prendre successivement à chaque tour de boucle. Les accolades {} servent à délimiter les actions à effectuer pour chacune des valeurs prises par la variable.

IMPORTANT : R n’aime pas vraiment les boucles for, il est beaucoup plus efficace d’utiliser apply. Tout particulièrement pour les très grandes et longues boucles, apply fait cela en une fraction de seconde… alors que for peut mettre plusieurs minutes, ou ne pas réussir.

Proposé par Vincent.

Déjà 11 commentaires. Cliquez ici pour réagir.

Sélectionner des sous-ensembles de jeux de données avec la fonction subset

2
dans algorithmique, manipulation de données, programmer avec R, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +3 sur 3 votes)
Loading...
Si l’on veut sélectionner un sous-ensemble d’un jeu de données à partir d’une condition simple étendue, d’une condition multiple exclusive, d’une condition multiple inclusive, d’une condition multiple exclusive étendue, ou d’une condition multiple inclusive étendue, il faut utiliser les opérateurs logiques OU et/ou ET.
Dans R, le ET s’écrit « & », et le OU s’écrit « | ».

Une condition simple porte sur une seule colonne.
Une condition multiple porte sur plusieurs colonnes à la fois (comme pour les régressions).
Une condition étendue porte sur l’union de plusieurs modalités/critères au sein d’une même colonne : elle utilise l’opérateur logique OU.
Une condition exclusive est une condition multiple qui porte sur l’intersection de sous-ensembles : elle utiilise l’opérateur logique ET.
Une condition inclusive est une condition multiple qui porte sur l’union de sous-ensembles : elle utilise l’opérateur logique OU.
Une condition simple ne peut, par nature, ni être exclusive, ni être inclusive.

Pour une sélection simple étendue, on utilisera l’opérateur logique OU.
Pour une sélection multiple exclusive, on utilisera l’opérateur logique ET.
Pour une sélection multiple inclusive, on utilisera l’opérateur logique OU.
Pour une sélection multiple exclusive étendue, on utilisera les opérateurs logiques OU et ET.
Pour une sélection multiple inclusive étendue, on utilisera l’opérateur logique OU.


 
 
data(iris)
head(Iris)
summary(iris)
 
### Exemple de sélection simple étendue sur une variable qualitative ###
# Il existe dans ce jeu de données 3 espèces : setosa, versicolor et virginica.
# On veut sélectionner le sous-ensemble concernant les espèces setosa OU versicolor.
iris2 = subset(iris, Species == "setosa" | Species == "versicolor") # on peut soit passer par la fonction 'subset'
iris2 = iris[iris$Species == "setosa" | iris$Species == "versicolor",] # ou soit passer par les conditions entre crochets
iris2
 
# En revanche, on ne peut pas utiliser cette syntaxe :
iris2 = subset(iris, Species == c("setosa","versicolor"))
# Ni celle-ci :
iris2 = iris[iris$Species == c("setosa","versicolor")]
# Car je ne sais pas pourquoi, mais ces syntaxes ne sélectionnent qu'une partie du sous-ensemble désiré. Cette partie a un nombre de lignes égal au nombre de lignes qui auraient été sélectionnées par une condition portant sur une seule modalité.
dim(iris2) # On a 50 lignes, alors qu'on devrait en avoir 100 !
 
 
### Exemple de sélection simple étendue sur une variable quantitative ###
# On veut sélectionner les fleurs dont la longueur du pétale est inférieure à 1,5 cm OU supérieure à 5 cm.
iris3 = subset(iris, Petal.Length <= 1.5 | Petal.Length >= 5)
iris3 = iris[iris$Petal.Length <= 1.5 | iris$Petal.Length >= 5,]
iris3
 
 
### Exemple de sélection multiple exclusive ###
# On veut sélectionner les fleurs de l'espèce setosa ET dont la longueur du pétale est inférieure à 1,5 cm.
iris4 = subset(iris, Species == "setosa" & Petal.Length <= 1.5)
iris4 = iris[iris$Species == "setosa" & iris$Petal.Length <= 1.5,]
iris4
 
 
### Exemple de sélection multiple inclusive ###
# On veut sélectionner les fleurs de l'espèce setosa OU celles dont la longueur du pétale est supérieure à 5 cm.
iris5 = subset(iris, Species == "setosa" | Petal.Length >= 5)
iris5 = iris[iris$Species == "setosa" | iris$Petal.Length >= 5,]
iris5
 
 
### Exemple de sélection multiple exclusive étendue ###
# On veut sélectionner les fleurs de l'espèce versicolor OU virginica ET dont la longueur du pétale est supérieure à 5 cm.
# Attentions, il faut alors utiliser des parenthèses !
iris6 = subset(iris, (Species == "versicolor" | Species == "virginica") & Petal.Length >= 5)
iris6 = iris[(iris$Species == "versicolor" | iris$Species == "virginica") & iris$Petal.Length >= 5,]
iris6
 
 
### Exemple de sélection multiple inclusive étendue ###
# On veut sélectionner les fleurs de l'espèce versicolor OU virginica OU celles dont la longueur du pétale est inférieure à 1,5 cm.
# Pas forcément besoin de parenthèses ici.
iris7 = subset(iris, Species == "versicolor" | Species == "virginica" | Petal.Length <= 1.5)
iris7 = iris[iris$Species == "versicolor" | iris$Species == "virginica" | iris$Petal.Length <= 1.5,]
iris7
 


Proposé par Stan.

Déjà 2 commentaires. Cliquez ici pour réagir.

Comment utiliser apply dans R ?

1
dans base indispensable, fonctions utiles, manipulation de données, Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +3 sur 9 votes)
Loading...
R n’aime pas les boucles: c’est long, parfois ca plante..mais surtout c’est long :).

Une des fonctions qu’il faut absolument maîtriser est apply. Elle permet de réaliser en parallèle la même opération sur toutes les lignes/ toutes les colonnes d’une matrice ou d ‘un jeu de données.


Pour utiliser apply, il faut
  • créer une fonction qui prend en paramètre un vecteur et qui nous ressort une transformation de ce vecteur.
  • que ce vecteur soit de la forme qu’une ligne ou qu’une colonne de notre jeu de données (prendre en compte les variables quali, l’ordre des variables..)
  • lancer apply sur son jeu de données, en précisant la fonction et s’il faut le prendre en ligne ou en colonne.


 
 data(iris)
# on va fabriquer une fonction qui, pour chaque ligne, nous donnera la somme de Sepal.Length, Sepal.Width, Petal.Length et Petal.Width
 
masomme<-function(monvec){
# les vecteurs sont ici de la forme c(5.1,3.5,1.4,0.2, setosa). Un simple sum(monec) ne fonctionnerait pas à cause de setosa
return(sum(as.numeric(monvec[1:4])))# le as.numeric permet de passer outre la transformation en caractères
}
lasomme<-apply(data.frame(iris),FUN=masomme,MARGIN=1)
head(cbind(iris,lasomme))# on rajoute une colonne avec le résultat et on regarde le début du jeu de données 
 
 
 



Cette transformation restera très rapide même avec un très grand nombre de lignes

Proposé par pierre.

1 commentaire. Cliquez ici pour réagir.

Comment gérer les erreurs dans un script R ? try

0
dans fonctions utiles, programmer avec R
- ça ne sert à rien -- c\'est interessant - (score de +3 sur 3 votes)
Loading...
Si vous voulez vous assurer qu’une instruction qui n’aboutit pas ne bloque pas votre script ou encore si vous avez besoin de gérer les exceptions, vous pouvez utiliser la fonction try.


 
rm(list=ls(all=TRUE)) # pour partir d'une mémoire vierge
print(a)# va vous renvoyer un message d'erreur... et aura bloqué votre script si vous l'aviez lancé via source() par exemple
try(print(a))# vous affiche l'erreur mais ne gêne pas la suite du processus
try(print(a),silent=T)# ne vous affiche même pas l'erreur
 


Ici l’exemple donné n’a que peu d’utilité, mais ce principe de gestion des erreurs (en particulier avec tryCatch) peut vous rendre beaucoup de services dans une boucle ou autre.


Proposé par vincent.

Pas encore de commentaire, cliquez ici pour réagir.

Comment connaître le temps d’execution d’une fonction ? system.time

3
dans algorithmique, optimisation, programmer avec R
- ça ne sert à rien -- c\'est interessant - (score de +3 sur 3 votes)
Loading...
Lorsque l’on réalise des scripts qui vont tourner un certain temps avant d’aboutir au résultat final, il est essentiel d’en optimiser le fonctionnement pour gagner du temps. Il nous faut pour cela un bon indicateur : comment savoir le temps que dure une fonction ou un script ?
Vous pouvez utiliser la fonction system.time



 
system.time(for ( i in 1:10000){print(i)})
system.time(for ( i in 1:10000){cat(i)}) 
 

Proposé par kevin.

Déjà 3 commentaires. Cliquez ici pour réagir.

Comment écrire plusieurs opérations sur une ligne dans R ?

0
dans base indispensable
- ça ne sert à rien -- c\'est interessant - (score de +3 sur 3 votes)
Loading...
R est un langage itératif, c’est a dire que le logiciel va interpréter une ligne de code après l’autre.
Pour gagner de la place, on peut vouloir écrire une série d’opérations sur une seule ligne. On perd en lisibilité, mais pour les choses simples cela peut être pratique.
 
rm(list=ls(all=TRUE))
a<-5
b<-7
# peut s'écrire sur une ligne grace au séparateur ;
rm(list=ls(all=TRUE));a<-5;b<-7
 



# pour les boucles for while ou les if, on peut compresser comme cela

 
 
x<-10
for ( i in 1:10){
print(i)
x<-x*i
print(x)
print("coucou")
}
 
# s'écrit en une ligne
x<-10;for ( i in 1:10){print(i);x<-x*i;print(x);print("coucou")} 
 
 



Proposé par vincent.

Pas encore de commentaire, cliquez ici pour réagir.

Comment utiliser la fonction by de R ?

1
dans Transformation de données
- ça ne sert à rien -- c\'est interessant - (score de +1 sur 1 votes)
Loading...
La fonction « by » est très intéressante pour éviter des boucles « for » et ainsi optimiser le code
data(iris)
summary(iris)
by(iris[,-5],iris[,5],mean)
 
 

ou encore quant vous voulez effectuer une fonction qui n’est pas définie.

 
 by(iris[,-5],iris[,5],function(ob){
#mettez ici l'opération que vous voulez faire sur le subset
return()
})
  
 

Le problème peut être que by retourne une liste et que l’on voudrait avoir un tableau de données. C’est ce que fait la fonction do.call, elle prend une liste et effectue une action dessus (ici rbind).

 
 
data(iris)
summary(iris)
do.call(rbind,by(iris[,-5],iris[,5],mean) )
 
 

Proposé par Guillaume.

1 commentaire. Cliquez ici pour réagir.

Liste des interfaces graphiques

1
dans
- ça ne sert à rien -- c\'est interessant - (pas encore de vote)
Loading...

Liste des interfaces graphiques pour R

R est fourni avec un éditeur de texte (RScript) plus ou moins complet en fonction du system d’exploitation que vous utilisez:  
  • L’éditeur de texte de R sous Mac OSX est le plus abouti avec coloration syntaxique du code, fermeture automatique des parenthèses/crochets ainsi qu’un inventaire des fonctions.
  • Sous linux, il n’y a pas d’éditeur de script à proprement parler. Par défaut il n’y a que le terminal, pas très ergonomique…
  • Beaucoup d’utilisateurs possèdent un PC sous Windows et là tout se compliquent. Éditer son code avec R sous Windows peut devenir un vrai calvaire dès lors que le code dépasse une centaine de lignes ou est composé de plusieurs fonctions ou de boucles.
Mais des utilisateurs de R bien intentionnés ont pensé à vous ! En effet, des plug-ins pour différents éditeurs de texte déjà existant voire même des éditeurs complètement dédiés à R ont été développés. Nous vous proposons ainsi une liste non exhaustive de ceux-ci ainsi que leur principale fonctionnalité :

Multiplateforme

Rstudio

Rstudio est le projet le plus abouti, il propose un véritable espace de développement dédié à R. C’est LE logiciel à installer. il propose:
  • coloration syntaxique
  • aide à la création de code
  • visualisation des objets en mémoire en temps réel
  • aide à la création de package
  • gestion sous forme de projet
  • et plein d ‘autres fonctionnalités.
vous pouvez le telecharger ici : http://www.rstudio.com/products/rstudio/download/

Rmcdr (multiplateforme)

N’est pas vraiment un éditeur de texte, il s’agit plutôt d’une surcouche « clic-bouton » qui permet en sélectionnant des actions dans un menu de voir le code correspondant s’écrire tout seul. C’est sympa pour commencer, mais vite limité. De plus Rcmdr gère très mal les boucles for. (Rcmdr s’installe comme un package classique, sous débian/ubuntu il a meme son propre .deb)  

Eclipse+StatEt (multiplateforme)

Pour toutes les personnes qui codent en Java/LaTeX et qui utilisent déjà Eclipse, cette configuration est parfaite pour vous! Elle vous permettra de travailler avec R sans avoir à quitter Eclipse qui est l’un des meilleurs éditeurs de texte open source. Vous retrouvez avec Eclipse et StatEt les avantages de R Studio plus les avantages d’un éditeur de langage dédié aux programmeurs (http://www.walware.de/goto/statet). Si vous utilisez déjà un service comme VaultPro, (http://www.sourcegear.com/vaultpro/) vous pourrez continuer à l’utiliser. Avertissement : l’installation peut être complexe.

Emac+ESS (multiplateforme)

Pour les utilisateurs avertis

Komodo (multiplateforme)

Un peu difficile à installer mais très complet (http://sciviews.org/SciViews-K/)  

Windows

Tinn-R (windows)

Un éditeur de texte vraiment léger qui vous permet d’utiliser quelques petits raccourcis clavier (par exemple : compiler la partie sélectionnée du code ou l’intégralité). Il vous apportera aussi la coloration syntaxique. Je le conseille tout d’abord aux débutants, car vous ne passerez pas trop de temps à l’installer puis à le configurer. (http://sciviews.org/Tinn-R/)

Notepad++ avec NppToR (windows)

Pour ceux qui utilisent notepad++ (et pour les autres!) une très bonne solution de travail(http://npptor.sourceforge.net/)  

Linux

L’interface de base

dans la console vous pouvez avoir R directement en tappant « R » Si vous voulez le minimum vital rajoutez ces paramètres « R -g Tk & »

Rkward (linux – KDE)

S’intègre bien dans un environnement KDE. (http://fr.wikipedia.org/wiki/RKWard) Des projets alternatifs on aussi vu le jour comme Red R (http://www.red-r.org/).Pour l’instant les fonctionnalités ne sont pas très nombreuses mais l’idée est bonne et mérite d’être suivie.
1 commentaire. Cliquez ici pour réagir.
Formation logiciel R