2016-04-07 17 views
3

ヒートマップをヒートマップから作成し、ヒートマップからデンドログラムを抽出し、デンドログラムをnewickファイル形式で保存しようとしています。マトリックスは、列上のゲノムおよび列上の遺伝子を有する。ヒートマップからデンドログラムを抽出中にエラーが発生しました

これを行うには、次のコードを実行しています。私はそれ意志の完全プロフィールで実行しようとすると、

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") 

このコードはうまく動作します。しかし、遺伝子列の数を減らすと、樹状図をhclustオブジェクトに変換しようとする段階でエラーが発生します。

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

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

私は、データセット内の任意の「NA」の値を探してみましたが、そこにどれもなかったか、そうでなければ、同様の完全なデータセットのために働いていてはいけません。

このエラーを解決する手助けがありますか?このエラーが発生する原因は何かを示唆していますか?

+0

関連記事:http://stackoverflow.com/questions/30354287 – zx8754

答えて

1

ヒートマップ2はhclustを使用して樹形図を作成します。あなたが望むのが樹形図であれば、それを使う理由はありません。その理由が、あなたがデンドログラムの注文をしたい場合は、dendextend packageのsortを使用して希望の注文を得るだけです。それ以外の場合は、hclustにとどまります。方法は次のとおりです。

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") 
関連する問題