export jpg vide si accolades

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

Bastien Gamboa
Messages : 151
Enregistré le : 13 Jan 2011, 21:31

export jpg vide si accolades

Messagepar Bastien Gamboa » 18 Juil 2016, 13:46

Bonjour,

Je teste le package 'cogena' de BioconductoR pour relier les expressions géniques et les pathways biologiques.

J'ai un soucis lors de l'export en .jpg pour la fonction heatmapPEI().
Comme vous pouvez le voir avec l'exemple suivant, le fichier _Test.jpg est bon, alors que le fichier _Test2.jpg est vide. la seule différence entre ces 2 est la présence d'accolade.

Code : Tout sélectionner

source("https://bioconductor.org/biocLite.R")
biocLite("cogena")
require(cogena)
data(Psoriasis)
clen_res <- clEnrich(coExp(DEexprs, nClust=2, clMethods="kmeans",  metric="correlation", method="complete", ncore=2, verbose=TRUE),
                     annofile=system.file("extdata", "c2.cp.kegg.v5.0.symbols.gmt.xz",  package="cogena"), sampleLabel=sampleLabel)

jpeg(file="_Test.jpg", width=10, height=8, units="in", res=150)
heatmapPEI(clen_res, "kmeans", "2")
dev.off()

{
jpeg(file="_Test2.jpg", width=10, height=8, units="in", res=150)
heatmapPEI(clen_res, "kmeans", "2")
dev.off()
}


Avez-vous une idée du pourquoi de ce comportement et comment passer outre ? (si ça aide, cette fonction utilise ggplot2)
J'ai en effet besoin de faire un test logique avant d'éventuellement produire le graphe, et avec les accolades, je n'ai que des graphes blancs.
Si je peux enlever (ou m'arranger) avec les accolades du test logique, avec les accolades de plusieurs boucles for c'est plus compliqué. Plusieurs boucle for, car clEnrich propose plusieurs méthodes de clustering, avec un nombre de clusters pouvant être multiple, avec également des fichiers d'annotation différent. Ce qui fait pas mal de graphes à produire, d'où les boucles for.

Pour info, le lien vers le github du package où j'ai posé la même question : https://github.com/zhilongjia/cogena/issues/2

Merci,
Bastien

Edit : Nécessité des boucles for + lien github

Melissa Lepage
Messages : 107
Enregistré le : 19 Avr 2010, 07:13

Re: export jpg vide si accolades

Messagepar Melissa Lepage » 03 Aoû 2016, 08:53

Bonjour,
Je n'ai pas de réponse directe à votre question.
Cependant, avec un ggsave à la place de la fonction jpg cela fonctionne dans une boucle (i.e. avec accolades).
L'autre astuce que je vous conseille est de sauver tous vos graphes dans une liste et ensuite je fais un PDF de cette liste (un seul PDF, tous les graphs à la suite, ou plusieurs PDF)
Ci dessous un extrait de code pour mettre dans un même PDF:

Code : Tout sélectionner

p <-list()
for (i in c(1:3)){
p[[i]]<-list()
p[[i]][[1]]<-ggplot()...
}

pdf("allplots.pdf",onefile = TRUE)
for (i in seq(length(p))){
  do.call("grid.arrange", p[[i]])
}
dev.off()

Bastien Gamboa
Messages : 151
Enregistré le : 13 Jan 2011, 21:31

Re: export jpg vide si accolades

Messagepar Bastien Gamboa » 14 Fév 2017, 09:38

Bonjour,

L'auteur du package cogena m'a répondu.
Pour information, la solution est d'expliciter la production du graphe via print().

Code : Tout sélectionner

{
  jpeg(file="_Test3.jpg", width=10, height=8, units="in", res=150)
  print(heatmapPEI(clen_res, "kmeans", "2"))
  dev.off()
}


Cette particularité semble venir du type de graphe ggplot.

Lien vers la réponse de l'auteur

HTH,
Bastien

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

Re: export jpg vide si accolades

Messagepar Logez Maxime » 14 Fév 2017, 09:42

Bonjour,

la necessité d'utiliser les fonctions print ou plot dans des accolades (par exemple boucle) ou au sein de fonction est aussi vraie pour les graphs basés sur lattice ou ggplot2.

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

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