Comment avoir des noms de matrices variables

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

Christian Dina
Messages : 40
Enregistré le : 18 Jan 2007, 12:36

Comment avoir des noms de matrices variables

Messagepar Christian Dina » 11 Mai 2010, 16:02

Bonjour,

je voudrais faire des opérations sur plusieurs matrices qui ont des nomes semblables, dans un boucle. Et du coup pouvoir "paramétrer" le nom de ces matrices. J'ai 4 grandes tables avec les même colonnes. gDGI, iDGI, gFUSION, iFUSION..

list.Studies <- c("DGI","FUSION")

for (i in list.Studies) {

rbind(paste("g",i,sep=""),paste("i",i,sep="")[!(paste("i",i,"$SNPID",sep="") %in% paste("g",i,"$SNPID",sep="")),])
}
En fait cela revient à faire :
rbind(gDGI,iDGI[!(iDGI$SNPID%in% gDGI$SNPID),])
puis
rbind(gFUSION,iFUSION[!(iFUSION$SNPID%in% gFUSION$SNPID),])

Idéalement, je voudrais aussi rediriger vers une matrice que je pourrais nommer ainsi
paste("res",i,sep="")


Bien sûr, cela ne marche pas. Faut-il que j'aime R pour continuer dans un langage qui ne comprend pas ma logique

:P

Dominique Soudant
Messages : 758
Enregistré le : 23 Avr 2008, 11:12
Contact :

Messagepar Dominique Soudant » 11 Mai 2010, 16:26

il faut chercher du coté de assign() et as.name()

EDIT 00:
assign() suffit finalement. Exemple, lecture de fichiers txt et chargement dans des data frames :

Code : Tout sélectionner

TxtFiles <- list.files(pattern="\\.txt$")

for(i in 1:length(TxtFiles)) assign(TxtFiles[i],read.delim(TxtFiles[i],colClasses="character"))

Christian Dina
Messages : 40
Enregistré le : 18 Jan 2007, 12:36

Messagepar Christian Dina » 12 Mai 2010, 07:43

Merci

je suis en train d'essayer et c'est déjà intéressant au niveau de la manipulation de fichiers pour moi.

Merci

Christian

Christian Dina
Messages : 40
Enregistré le : 18 Jan 2007, 12:36

Marche avec fichiers - pas avec des data.frames

Messagepar Christian Dina » 12 Mai 2010, 08:02

Cela marche sur des fichiers mais pas sur des data.frames. Il faut dire que je suis assez éloigné de l'environnement R donc j'ai du mal à comprendre les options de assign.

Je vais tester plein d'options pour y arriver.

Merci encore pour l'indication (et si vous savez comment faire marcher sur des data.frames, cela m'aiderait)

Cordialement

Christian

Etienne Neuts
Messages : 26
Enregistré le : 30 Sep 2008, 07:13

Messagepar Etienne Neuts » 12 Mai 2010, 12:49

Je pense que si tu essayes cela, ça devrait fonctionner

Code : Tout sélectionner

list.Studies <- c("DGI","FUSION")

for (i in list.Studies) {

rbind(get(paste("g",i,sep="")),get(paste("i",i,sep=""))[!(get(paste("i",i,sep=""))[,which(names(get(paste("i",i,sep="")))=="SNPID")] %in% get(paste("g",i,sep=""))[,which(names(get(paste("g",i,sep="")))=="SNPID")]),])
}


Christian Dina
Messages : 40
Enregistré le : 18 Jan 2007, 12:36

Messagepar Christian Dina » 12 Mai 2010, 12:57

Ca marche.

Merci beaucoup!!!

Christian

Christian Dina
Messages : 40
Enregistré le : 18 Jan 2007, 12:36

Messagepar Christian Dina » 12 Mai 2010, 15:55

Encore moi,

j'arrive donc, en utilisant le get, à attraper des données dans des data.frames dont le nom est "paramètré" (pas en fixe).

Par contre, pour l'instant je n'arrive pas à créer un nome variable pour la data.frame crée (il n'était pas dans ma première question)

J'ai essayé assign() comme décrit ci-dessous mais cela ne marche pas..


data1 <- matrix(c(1,2,3,4),2,2)
data2 <- matrix(c("A","B","C","D"),2,2)

for (i in 1:2) {print(get(paste("data",i,sep=""))) }
Donne ce que je veux :

[,1] [,2]
[1,] 1 3
[2,] 2 4
[,1] [,2]
[1,] "A" "C"
[2,] "B" "D"

Par contre, si je veux rediriger les résultats dans des fichiers de type

sortie1 (pour data1)
et sortie2 (pour data2)
J'ai une erreur.

En m'inspirant du post ci(dessous
http://r.789695.n4.nabble.com/Assign-Na ... 78648.html
j'ai fait :

for (i in 1:2) {gogo <- get(paste("data",i,sep="")); nume <- paste("roro",i,sep="");print(gogo);print(nume);assign(gogo,nume,envir = globalenv()) }

et j'ai comme erreur :
Erreur dans assign(gogo, nume, envir = globalenv()) :
premier argument incorrect


Je sais que je peux rediriger vers une liste. Mais à un moment donné, il faudra sans doute que je crée des data.frames dont le nom devra inclure un élément variable issu (ici 1 ou 2, et dans mon vrai exemple "DGI" ou "FUSION").

Etienne Neuts
Messages : 26
Enregistré le : 30 Sep 2008, 07:13

Messagepar Etienne Neuts » 21 Mai 2010, 10:05

assign ne s'utilise pas de cette façon
?assign

Code : Tout sélectionner

assign(nume,gogo,envir = globalenv())

Christian Dina
Messages : 40
Enregistré le : 18 Jan 2007, 12:36

A y est

Messagepar Christian Dina » 16 Nov 2010, 15:22

JE viens enfin (ça tourne lentement) d'y arriver. Merci Etienne.

En reprenant cela quelque mois après, je m'en sors.

Christian


Retourner vers « Questions en cours »

Qui est en ligne

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