Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > R
R Forum d'entraide sur la programmation en langage R
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/12/2012, 21h15   #1
B65AcR
Candidat au titre de Membre du Club
 
Homme
touristepationné
Inscription : janvier 2012
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : touristepationné
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 44
Points : 14
Points : 14
Par défaut Explication concernant apply()

Bonjour,

Je suis débutant en programmation et je ne parviens pas à utiliser correctement la fonction apply().

?apply ne m'a pas assez éclairé pour pouvoir remplacer mes boucles for dans tous les cas.

Voici un exemple très basique de ce que je n'arrive pas à faire avec apply (égal à mat<-matrice)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#1er tableau
num<-c(1:5)
Un <- c(3,"3W",10,5,5)
Deux<-c(5,10,5,3,1)
Trois<-c(4,4,4,4,3)
matrice <- matrix(c(num,Un,Deux,Trois), nrow=5, ncol=4)
#2eme tableau
mat <- matrix(0, nrow=5, ncol=4)
#duplication de matrice dans mat
for (i in 1:nrow(matrice))
{
mat[i,]<-matrice[i,]
}
Quelqu'un pourrait-il m'expliquer ?

Un grand merci par avance.
B65AcR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 00h22   #2
vchouraki
Membre éclairé
 
Vincent Chouraki
Inscription : juillet 2010
Messages : 137
Détails du profil
Informations personnelles :
Nom : Vincent Chouraki
Localisation : Etats-Unis

Informations forums :
Inscription : juillet 2010
Messages : 137
Points : 363
Points : 363
Bonjour,

Le pdf de Vincent Goulet est très bien fait pour comprendre les fonctions apply (voir le chapitre 6).

http://cran.r-project.org/doc/contri...ammation_R.pdf

HTH

Vincent

PS : d'ailleurs, il serait intéressant de le rajouter sur la page d'accueil de r.developpez
vchouraki est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 20h57   #3
B65AcR
Candidat au titre de Membre du Club
 
Homme
touristepationné
Inscription : janvier 2012
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : touristepationné
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 44
Points : 14
Points : 14
Ce lien va m'être très utile...

Mais malgré sa lecture ainsi que celle d'autres tutos, je n'arrive toujours pas à remplacer mes boucles for concernant l'exemple de mon post.
Pour ce qui est de faire une addition de lignes ou de colonnes, je suis au top mais pas pour remplacer les valeurs d'une seule colonne d'un tableau par celles d'une autre colonne d'un autre tableau en y rajoutant un calcul.

Code :
apply(matrice,1,function(x){matrice[,1]+1})
Citation:
Erreur dans matrice[, 1] + 1 :
argument non numérique pour un opérateur binaire
Certes, je ne suis pas doué, mais j'aurais au moins essayé...

Sinon, puisque vous parlez de rajouter des tutos sur le forum, il pourrait être pratique de créer une sorte d'annuaire des réponses de R face à ce genre d'erreur de débutant ou d'étourderies. Un moteur de recherche trouverait facilement la page, et l'utilisateur trouverait sa réponse sans passer pour un boulet

Cordialement.

B65
B65AcR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 23h21   #4
vchouraki
Membre éclairé
 
Vincent Chouraki
Inscription : juillet 2010
Messages : 137
Détails du profil
Informations personnelles :
Nom : Vincent Chouraki
Localisation : Etats-Unis

Informations forums :
Inscription : juillet 2010
Messages : 137
Points : 363
Points : 363
Bonjour,

Je n'aime pas la fonction apply. Je préfère les autres et surtout lapply et sapply. Voici un exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Création d'un matrice
matrice <- matrix(1:10, 2, 5)

# But : multiplier chaque élément par deux
# Solution évidente
matrice2 <- matrice * 2

# Boucle for
matrice2 <- matrix(0, 2, 5)
for (i in 1:ncol(matrice)) {
 matrice2[, i] <- matrice[, i] * 2
}

# sapply
matrice2 <- sapply(1:ncol(matrice), function(i) {
 matrice[, i] * 2
})
En bref, ce que vous mettez dans "for(...)" se retrouve en premier argument de sapply et le "corps" de la boucle se retrouve dans une fonction. L'assignation ne se fait plus dans le "corps" puisqu'on utilise une fonction (scope, variables locales, globales...) mais en tant que résultat de la fonction sapply. Dans cet exemple, je sais plus ou moins que sapply va me renvoyer une matrice donc ça me suffit.

HTH

Vincent
vchouraki est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2012, 10h27   #5
B65AcR
Candidat au titre de Membre du Club
 
Homme
touristepationné
Inscription : janvier 2012
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : touristepationné
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 44
Points : 14
Points : 14
Merci pour votre aide. Entre vos explications et le lien que vous avez transmis, je pense avoir de quoi avancer un bon moment.
B65AcR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h26.


 
 
 
 
Partenaires

Hébergement Web