Récupérer des données - Array

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

Diane MANZON
Messages : 53
Enregistré le : 18 Juin 2018, 08:31

Récupérer des données - Array

Messagepar Diane MANZON » 11 Déc 2018, 15:23

Bonjour à tous,

Je travaille avec un array (pour la première fois) et je n'arrive pas à sélectionner des données (chose simple quand on travaille sur une matrice).
Voici un exemple reproductible de mon problème:

Code : Tout sélectionner

data <- matrix(rnorm(56), nrow=4, ncol=14) # matrice de départ
B = 5 # nombre final de matrices
nb_alea = NULL
BS = array(numeric(), c(nrow(data), ncol(data), B)) #array vide
for (i in 1:B) {
  nb_alea=sample(nrow(data), 14, T)
  BS[ , , i] <- array(data[nb_alea,], c(nrow(data), ncol(data))) #matrices générées aléatoirement à partir de la matrice de départ
}


Pour chacune de mes 5 matrices, je voudrais sélectionner la colonne pour laquelle la ligne 4 a la plus grande valeur.
J'arrive à trouver quelle valeur est la plus grande dans la ligne 4 pour chaque matrice

Code : Tout sélectionner

max(BS[4,,1]) #exemple de valeur max pour la ligne 4 de la première matrice
mais je voudrais avoir toute la colonne correspondante, et pour chacune de mes matrices...

Quelqu'un pourrait-il m'éclairer ?
Je vous remercie par avance,
Cordialement,
Diane MANZON

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

Re: Récupérer des données - Array

Messagepar Logez Maxime » 11 Déc 2018, 16:19

Bonjour,

le array est très pratique pour stocker dans un objet léger le même type d'info mais il n'est pas forcément facile à manipuler (au moins au départ).
Il te faut faire des tests pour voir ce que ça fait sur la structure du array de ne sélectionner qu'une ligne, qu'une colonne ou qu'une matrice.
Par exemple

Code : Tout sélectionner

BS[4,,]
te renvoit toutes les lignes "4" de tes matrices mais dans un objet simplifié puisque tu perds une dimension, qui est une matrice et tes lignes 4 sont maitenant en colonne (par défaut les données sont rentrées en colonne dans ce genre d'objet).
Du coup si tu veux savoir quelle colonne de l'objet BS contient la plus grande valeur sur la ligne 4 de chaque ligne il te faut faire :

Code : Tout sélectionner

mx <- apply(BS[4, ,],2,which.max)

Ensuite pour extraire les colonnes matrice par matrice :

Code : Tout sélectionner

mapply(function(x, y) BS[, x, y], mx, 1:5)
           [,1]       [,2]      [,3]       [,4]       [,5]
[1,]  0.3823188 -1.5841019 -1.550849 -1.5508486 -1.5508486
[2,]  0.3823188 -1.5508486  1.597213  0.1795772  0.1795772
[3,] -1.3352919  0.1795772 -1.584102  0.1795772 -1.5508486
[4,]  1.2741662  1.5972129  1.597213  1.5972129  1.5972129
Si tu veux pas perdre une dimension quand tu ne sélectionnes qu'une colonne, ligne ou matrice dans les crochets de sélection après la dernière virgule tu peux rajouter drop = FALSE :

Code : Tout sélectionner

BS[4,,,drop = FALSE]
Cordialement,
Maxime

Diane MANZON
Messages : 53
Enregistré le : 18 Juin 2018, 08:31

Re: Récupérer des données - Array

Messagepar Diane MANZON » 14 Déc 2018, 14:18

Logez Maxime a écrit :Bonjour,

le array est très pratique pour stocker dans un objet léger le même type d'info mais il n'est pas forcément facile à manipuler (au moins au départ).
Cordialement,
Maxime


Bonjour Maxime,

Merci pour la réponse et désolée pour mon temps de réponse! Je suis en train de tester cette méthode qui marche très bien sur mon exemple que j'ai donné ici !! Donc merci beaucoup !!
J'ai un autre problème… Je voudrais pouvoir stocker dans un fichier excel mes 50 matrices.
Est-ce qu'on peut exporter un array dans un fichier ?
Je ne trouve pas la fonction qui permet de le faire…

Merci beaucoup par avance,

Cordialement,

Diane

Diane MANZON
Messages : 53
Enregistré le : 18 Juin 2018, 08:31

Re: Récupérer des données - Array

Messagepar Diane MANZON » 17 Déc 2018, 09:42

Bonjour à tous,
Je n'ai toujours pas trouvé comment je pouvais stocker les données d'un array (dans un fichier excel par exemple)...

Quelqu'un aurait-il une idée ?

Je vous remercie par avance,
Bien cordialement,

Diane MANZON

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

Re: Récupérer des données - Array

Messagepar Logez Maxime » 17 Déc 2018, 13:00

Re,

Tout dépend de ce que tu cherches à faire. Toutes tes données sur la même feuille ? Une feuille par matrice ?
Personnellement j'utilise le package XLConnect (attention plusieurs dépendances à installer correctement), qui te permet de gérer un classeur comme tu l'entends, création de feuille, export à un endroit précis, etc.

Cordialement,
Maxime

Diane MANZON
Messages : 53
Enregistré le : 18 Juin 2018, 08:31

Re: Récupérer des données - Array

Messagepar Diane MANZON » 17 Déc 2018, 13:43

Logez Maxime a écrit :Re,

Tout dépend de ce que tu cherches à faire. Toutes tes données sur la même feuille ? Une feuille par matrice ?
Personnellement j'utilise le package XLConnect (attention plusieurs dépendances à installer correctement), qui te permet de gérer un classeur comme tu l'entends, création de feuille, export à un endroit précis, etc.

Cordialement,
Maxime

Re,

Une feuille par matrice, ce serait parfait !
J'ai installé XLConnect, j'essaye la fonction CreateSheet mais je ne suis pas du tout familière avec ce package, tu peux m'en dire plus ?
Par exemple, avec ce code:

Code : Tout sélectionner

data <- matrix(rnorm(56), nrow=4, ncol=14)
B = 5
nb_alea = NULL
BS = array(numeric(), c(nrow(data), ncol(data), B))

for (i in 1:B) {
  nb_alea=sample(nrow(data), 14, T)
  BS[ , , i] <- array(data[nb_alea,], c(nrow(data), ncol(data)))
}


Comment je peux faire pour avoir mes 5 matrices du array "BS" dans 5 feuilles différentes sous excel ?

Merci beaucoup…

Cordialement,

Diane

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

Re: Récupérer des données - Array

Messagepar Logez Maxime » 17 Déc 2018, 13:50

re,

Une partie de l'information est disponible ici : ?workbook
Une possibilité :

Code : Tout sélectionner

wb <- loadWorkbook("Diane.xlsx", create = TRUE)

for (i in 1:dim(BS)[3]) {
  createSheet(wb, name = sprintf("BS%02d", i))
  writeWorksheet(wb, BS[, , i], sheet = sprintf("BS%02d", i))
  }

saveWorkbook(wb)
Je te laisse regarder toutes les possibilités de customisation qu'offre ce package.

Cordialement,
Maxime

Diane MANZON
Messages : 53
Enregistré le : 18 Juin 2018, 08:31

Re: Récupérer des données - Array

Messagepar Diane MANZON » 17 Déc 2018, 15:52

Logez Maxime a écrit :re,

Une partie de l'information est disponible ici : ?workbook
Une possibilité :

Code : Tout sélectionner

wb <- loadWorkbook("Diane.xlsx", create = TRUE)

for (i in 1:dim(BS)[3]) {
  createSheet(wb, name = sprintf("BS%02d", i))
  writeWorksheet(wb, BS[, , i], sheet = sprintf("BS%02d", i))
  }

saveWorkbook(wb)
Je te laisse regarder toutes les possibilités de customisation qu'offre ce package.

Cordialement,
Maxime


Re,

Super merci !!! Oui je vais regarder ça !

Bonne soirée,
Cordialement,

Diane


Retourner vers « Questions en cours »

Qui est en ligne

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