pb avec cbind??

Questions sur les objets de R et la manipulation des données

Modérateur : Groupe des modérateurs

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

pb avec cbind??

Messagepar Sébastien Hamel » 01 Juin 2006, 14:09

mon pb est le suivant:

j'ai créé une liste listVECT dans lequel j'ai 4 vecteurs de dimensions équivalentes (a savoir une longueur=18209 mé pe importe!!)

listVECT [[1]] = 18209 valeurs différentes
listVECT [[2]] = 18209 .... et ainsi de suite

j'aimerais créer une matrice MAT qui regroupe chaque vecteur dans une colonne

par exemple MAT=
colonne 1 = listVECT [[1]]
colonne 2 = listVECT [[2]]
et ainsi de suite

j'ai donc écrit dans une boucle:

for (i in seq(length(listVECT))) {
LISTRES [[9]] <- cbind(listVECT[[i]])
}

return (LISTRES)

mais le pb est que l'on me retourne dans LISTRES [[9]] un vecteur de dimension 18209

alors qu'en faisant normalement a la main:
TEST <- cbind(listVECT[[1]], listVECT[[2]], listVECT[[3]], listVECT[[4]])

j'obtient bien dans TEST une matrice avec comme dimension: ncol=4 & nrow=18209 donc j'ai bien chaque vecteur présent dans ma listVECT dans chaque colonne de ma matrice TEST

kkun oré til une solution a ce pb??

Merci d'avance

Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

Messagepar Sébastien Hamel » 01 Juin 2006, 14:15

dernier point, j'ai fait la boucle car je ne sais pas a l'avance combien de vecteur est present dans ma listVECT (il peut y avoir 4 vecteurs comme 10 vecteurs??), ca veut dire que la procédure doit etre "automatique"!!

Merci encore

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 01 Juin 2006, 17:50

Voir la fonction ?do.call. Exemple:

Code : Tout sélectionner

> test <- list(1:10, 11:20, 21:30)
> test
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[2]]
 [1] 11 12 13 14 15 16 17 18 19 20

[[3]]
 [1] 21 22 23 24 25 26 27 28 29 30

>
> do.call("cbind", test)
      [,1] [,2] [,3]
 [1,]    1   11   21
 [2,]    2   12   22
 [3,]    3   13   23
 [4,]    4   14   24
 [5,]    5   15   25
 [6,]    6   16   26
 [7,]    7   17   27
 [8,]    8   18   28
 [9,]    9   19   29
[10,]   10   20   30


Sébastien Hamel
Messages : 71
Enregistré le : 11 Mai 2006, 08:00

Messagepar Sébastien Hamel » 02 Juin 2006, 07:26

Merci bcp renaud, tu m'enleves une epine du pied...

Encore MERCI

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 02 Juin 2006, 17:37

En complément, les listes et les matrices sont en fait des vecteurs avec des attributs particuliers. On peut profiter de cela quand les opérations avec do.call ou autres se révèlent trop lentes:

Code : Tout sélectionner

> Liste <- list(1:5, 6:10, 11:15)
> do.call("cbind", Liste)
     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    2    7   12
[3,]    3    8   13
[4,]    4    9   14
[5,]    5   10   15

> Vecteur <- unlist(Liste)

> (nbcol <- length(Liste))
[1] 3

> (nblig <- sapply(Liste, length))
[1] 5 5 5

> matrix(Vecteur, ncol = nbcol)
     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    2    7   12
[3,]    3    8   13
[4,]    4    9   14
[5,]    5   10   15

> attr(Vecteur, "dim") <- c(nblig[1], nbcol)
> Vecteur
     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    2    7   12
[3,]    3    8   13
[4,]    4    9   14
[5,]    5   10   15


Retourner vers « Archives : Manipulation de données avec R »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité