2015-02-25 1 views
0

Je veux essayer de créer une fonction qui va générer des heatmaps en appelant heatmap.2. Entre autres choses, je veux générer le titre des parcelles en appelant add.expr, par exemple:passer un caractère généré en utilisant paste() à mtext()

add.expr=c(mtext(text=titlestring, side=3, line=4, cex=1) 

Avec titlestring étant un vecteur de charqacter passé à la fonction par une autre fonction:

titlestring<-paste("Mean bin methylation",samplename, "on 5kb flanked CpG Island promoters in mm9") 

Quand j'essaye d'exécuter ma fonction j'obtiens l'erreur suivante:

Error in as.graphicsAnnot(text) : object 'titlestring' not found I do know that titlestring is defined in the scope of my funciton , as I tested this using print() I thouhgt that the problem my be related to the fact the mtext() expects an exprssion object, so I coerced titlestring to an expression using as.expression() . But I still get this error.

N'importe quelle idée ce pourrait être le problème?

Merci à l'avance

Dolev Rahat

+1

Votre commande titlestring donne une erreur, car samplename ne sait pas. Pourquoi ne pas utiliser quelque chose comme main = titlestring dans l'appel heatmap? –

+0

@RuthgerRighart: Merci. L'utilisation de main est en effet une possibilité, mais puisque je veux ajouter un titre secondaire, je préfère toujours utiliser add.expr() car il est plus fleixble. samplename est un vecteur de caractères engendré par ma fonction d'appel basée sur l'un de ses arguments, donc il est défini (comme je l'ai dit, j'ai également vérifié que la chaîne de titre est visible pour la fonction interne). N'y a-t-il aucune possibilité d'appeler mtext() avec des vecteurs de caractères transmis par une autre fonction? – user1614062

+1

Je ne suis pas sûr de ce que vous voulez exactement, il serait bon d'avoir un exemple de données. S'il vous plaît trouver une solution de contournement possible dans la boîte de réponse, espérons que cela aide! –

Répondre

0

Si votre question principale est d'ajouter un titre secondaire à l'aide d'une fonction, vous pouvez utiliser principal = c (titlestring, sous-chaîne), où vous pouvez modifier les chaînes de vecteur vous aimez. L'exemple est tiré de l'ensemble mtcars (il peut être trouvé en utilisant? Heatmap).

require(graphics) 
require(grDevices) 

x <- as.matrix(mtcars) 
rc <- rainbow(nrow(x), start = 0, end = .3) 
cc <- rainbow(ncol(x), start = 0, end = .3) 

titlestring<-c("Mtcars dataset") 
substring<-c("First example") 
par(cex.main=0.9) 
heatmap(x, Colv = NA, col = cm.colors(256), scale = "column", 
    RowSideColors = rc, margins = c(5,10), 
    xlab = "specification variables", ylab = "Car Models", 
    main = c(titlestring, substring)) 

enter image description here)

0

Pas la peine que tout ce tapage, mais je voudrais idéalement être en mesure d'avoir différentes tailles de police pour le titre principal et secndary, ainsi que pour contrôler la position Thier. Je pourrais le faire si j'ajouté le titre avec add.expr() en utilisant les littéraux, par exemple:

heatmap.2 (as.matrix(matToPlot[,(1:totCols)]), 
     Rowv=FALSE, Colv=FALSE, dendrogram="none", 
     breaks=seq(0,1,by=1/length(methColors)), 
     col=methColors, trace="none",colsep=colsep,sepcolor=c("sky blue"), 
     #main=paste(titlestring,subtitlestring,chromstring,sep="\n"), 
     add.expr=c(mtext(text="Read coverage of Dox Plus on 5kb flanked CpG 
      Island promoters in mm9", side=3, line=4, cex=1), 
     mtext(text="Island set represents island for which ChIP data is avilable 
      and is order by mean(H3K4me3)-mean(H3K27me3) within islands", side=3, line=2, cex=0.8), 
     mtext(text="H3K27me3", side=1, adj=0.125, line=3), 
     mtext(text="H3K4me3", side=1, adj=0.375, line=3), 
     mtext(text="H3K4me1", side=1, adj=0.625, line=3), 
     mtext(text="Methylation", side=1,adj=0.9, line=3))) 

Alors que l'utilisation principale que je reçois un résultat que je peux vivre avec, mais qui est pas aussi bon (comparer ces deux parcelles):

plot generated using add.expr

plot generated using main