2011-07-24 7 views
13

ヒートマップ2は、クラスタリングのための距離行列とhclustを計算するためのデフォルトのdistです。 重心法を使うためにユークリッド法とhclustを使うdistをどのように設定できるのですか? コンパイル可能なコードサンプルを提供しました。 私は試しました:distfun = dist(method = "euclidean")、 しかし、それは動作しません。何か案は?ヒートマップの距離行列とクラスタリング方法を設定します。

library("gplots") 
library("RColorBrewer") 

test <- matrix(c(79,38.6,30.2,10.8,22, 
81,37.7,28.4,9.7,19.9, 
82,36.2,26.8,9.8,20.9, 
74,29.9,17.2,6.1,13.9, 
81,37.4,20.5,6.7,14.6),ncol=5,byrow=TRUE) 
colnames(test) <- c("18:0","18:1","18:2","18:3","20:0") 
rownames(test) <- c("Sample 1","Sample 2","Sample 3", "Sample 4","Sample 5") 
test <- as.table(test) 
mat=data.matrix(test) 

heatmap.2(mat, 
dendrogram="row", 
Rowv=TRUE, 
Colv=NULL, 
distfun = dist, 
hclustfun = hclust, 
xlab = "Lipid Species", 
ylab = NULL, 
colsep=c(1), 
sepcolor="black", 
key=TRUE, 
keysize=1, 
trace="none", 
density.info=c("none"), 
margins=c(8, 12), 
col=bluered 
) 

答えて

25

heatmap.2ためのコードを一瞥私はデフォルトはdistを使用することをかなり確信している、それはデフォルトが順番にユークリッド距離を使用することです。 distfun = dist(method = 'euclidean')を渡す時、あなたの試みはうまくいきませんでした

理由はdistfun(およびhclustfun)は単に機能の名前ことになっているということです。

heatmap.2(...,hclustfun = function(x) hclust(x,method = 'centroid'),...) 

私が述べたように、私はheatmap.2はデフォルトでユークリッド距離を使用していることをかなり確信しているが、同様のソリューションは、次のことができます。あなたは、引数をデフォルト設定を変更して渡したいのであれば、あなたはこのようなラッパー関数を記述する必要があります使用される距離関数を変更するために使用されます:

heatmap.2(...,distfun = function(x) dist(x,method = 'euclidean'),...) 
+0

優秀!それはトリックを行う – jonas87

+2

@ jonas87 - あなたは大歓迎です、そして、ようこそ!この回答があなたの問題を解決した場合は、その隣にあるチェックマークをクリックしてください。将来、この質問を見る人はあなたの問題を解決したことを知ります... – joran

関連する問題