2016-04-07 15 views
3

Ich versuche, eine Heatmap mit heatmap.2-Funktion aus einer binären Matrix zu erstellen, das Dendrogramm aus der Heatmap zu extrahieren und das Dendrogramm in ein neues Dateiformat zu speichern. Die Matrix hat Genome auf der Reihe und Gene auf der Säule.Fehler beim Extrahieren von Dendrogramm aus einer Heatmap

Dazu verwende ich folgenden Code.

library(ggdendro) 
library(ape) 
library(gplots) 
library(vegan) 

profile <-as.data.frame(read.delim("profile_file.txt",row.names=1,sep="\t", as.is=T)) 

dist_func<-function(x) vegdist(x,"jaccard",binary=TRUE) 

hclust_func<-function(x) hclust(x,method="ward.D2") 

heat<-heatmap.2(as.matrix(profile),Rowv=TRUE,Colv=TRUE,distfun=dist_func,hclustfun=hclust_func,trace="none") 

row.dendro<-heat$rowDendrogram 

row.hcclust<-as.hclust(row.dendro) 

row.phylo<-as.phylo(row.hcclust) 

write.tree(phy=row.phylo, file="tree_file.nwk") 

Dieser Code funktioniert gut, wenn ich versuche, es wird volle Profil ausführen. Aber wenn ich die Anzahl der Genspalten reduziere, bekomme ich einen Fehler bei dem Schritt, wo ich versuche, das Dendrogramm in das hclust-Objekt zu konvertieren.

row.hcclust<-as.hclust(row.dendro) 

Error: all(vapply(s, is.integer, NA)) is not TRUE

Ich habe versucht, für alle „NA“ Werte in meinem Dataset suchen, aber es gab keine oder sonst sollte es nicht so gut für vollständigen Datensatz gearbeitet hat.

Kann mir bitte jemand helfen, diesen Fehler zu beheben? oder schlagen Sie vor, was der Grund für diesen Fehler sein könnte?

+0

Related post: http://stackoverflow.com/questions/30354287 – zx8754

Antwort

1

heatmap.2 verwendet hclust, um das Dendrogramm zu erstellen. Wenn alles, was Sie wollen, das Dendrogramm ist, gibt es keinen Grund, es zu verwenden. Wenn der Grund dafür ist, dass Sie das Dendrogramm bestellen möchten, verwenden Sie einfach die Sortieroption dendextend package, um die gewünschte Bestellung zu erhalten. Ansonsten bleib einfach bei hclust. Hier ist wie:

library(ape); library(vegan); 
library(magrittr) # for the pipes: %>% 

profile <- as.data.frame(read.delim("profile_file.txt",row.names=1,sep="\t", as.is=T)) 
row_hclust <- profile %>% as.matrix %>% t %>% vegdist("jaccard",binary=TRUE) %>% hclust(method="ward.D2") 
row.phylo <- as.phylo(row_hclust) 
write.tree(phy=row.phylo, file="tree_file.nwk")