remplacer un apply et un for

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Golfesh Alphonse
Messages : 138
Enregistré le : 30 Aoû 2012, 08:57

remplacer un apply et un for

Messagepar Golfesh Alphonse » 15 Avr 2015, 10:25

Bonjour,

voici un bout de code que j'amerai améliorer en remplaçant la boucle for
(je vais chercher un numero de colonne dans un tableau pour aller recupérer ensuite la valeur contenu dans ce meme fichier dans une autre colonne, qui est variable)

Code : Tout sélectionner

vec<-apply(as.matrix(fichier[,8]) ,1, function(x) 55 + (x*5))

for(i in 1:length(vec)){tab[i,1]<- as.vector(fichier[i,vec[i]])}


est-ce possible?

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 15 Avr 2015, 14:05

Bonjour,

j'ai pas tout saisi de la deuxième partie du code mais pour le apply, tu applique une fonction sur un vecteur préalablement transformer en matrice ?
Est-ce que tu ne peux pas directement faire :

Code : Tout sélectionner

vec<-55 + fichier[,8]*5

Pour la deuxième partie quelque chose comme :

Code : Tout sélectionner

tab[,1]<- fichier[cbind(seq_len(length(vec)),vec)]


Cordialement,
Maxime

Golfesh Alphonse
Messages : 138
Enregistré le : 30 Aoû 2012, 08:57

Messagepar Golfesh Alphonse » 15 Avr 2015, 18:30

wow, je ne connaissais pas seq_len. Très pratique. Et merci une nouvelle fois!

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Messagepar Mickael Canouil » 16 Avr 2015, 07:36

Pour information "seq_len" est équivalent à "seq" avec les arguments par défaut.

De plus, il existe "seq_along" permettant de remplacer seq(length())

Code : Tout sélectionner

tab[,1]<- fichier[cbind(seq_along(vec),vec)]
Mickaël
mickael.canouil.fr | rlille.fr

Golfesh Alphonse
Messages : 138
Enregistré le : 30 Aoû 2012, 08:57

Messagepar Golfesh Alphonse » 24 Avr 2015, 11:57

Merci Mickaël!

Golfesh Alphonse
Messages : 138
Enregistré le : 30 Aoû 2012, 08:57

Re: remplacer un apply et un for

Messagepar Golfesh Alphonse » 26 Juil 2015, 10:51

bonjour!

je n'arrive pas à remplacer ce for par un mapply. la modif du tableau rate

Code : Tout sélectionner

for( x in names(toto)){
moins[grep(x,moins[,1]),2] <- nrow(toto[[x]])
}


Moins est un tableau de 10 lignes et 3 colonnes, toto une liste

Code : Tout sélectionner

toto <- structure(list(a = NULL, z = NULL, e = NULL, r = NULL, t = NULL,
    y = NULL, u = NULL, i = NULL, o = NULL, p = NULL), .Names = c("a",
"z", "e", "r", "t", "y", "u", "i", "o", "p"))

moins = matrix(0,length(names(toto)),3)

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Re: remplacer un apply et un for

Messagepar Nicolas Péru » 27 Juil 2015, 06:21

bonjour,

Comme ça ?

Code : Tout sélectionner

mapply(function(x) moins[grep(x,moins[,1]),2] <- nrow(toto[[x]])
,names(toto)
)


Nicolas

Golfesh Alphonse
Messages : 138
Enregistré le : 30 Aoû 2012, 08:57

Re: remplacer un apply et un for

Messagepar Golfesh Alphonse » 27 Juil 2015, 12:30

Presque... suaf que mapply me retourne une liste. Je voudrais obtenir le tableau "moins" avec les valeurs insérées à leur place grâce au grep


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité