2011-07-24 19 views
13

heatmap.2 se establece por defecto en dist para calcular la matriz de distancia y hclust para clustering. ¿Alguien ahora cómo puedo configurar dist para usar el método euclidiano y ocultar el uso del método centroide? Proporcioné un ejemplo de código compilable abajo. Intenté: distfun = dist (method = "euclidean"), pero eso no funciona. ¿Algunas ideas?configuración de matriz de distancia y métodos de agrupamiento en heatmap.2

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 
) 

Respuesta

25

Echando un vistazo al código para heatmap.2 Estoy bastante seguro de que el defecto es usar dist, y es por defecto es a su vez de usar distancias euclidianas.

La razón de su intento de pasar distfun = dist(method = 'euclidean') no funcionó es que distfun (y hclustfun) se supone que son simplemente nombre de funciones. Así que si desea modificar los valores predeterminados y pasar argumentos que necesita para escribir una función de envoltura así:

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

Como ya he mencionado, estoy bastante seguro de que está utilizando heatmap.2 distancias euclidianas por defecto, pero una solución similar puede se utilizará para modificar la función de distancia utilizada:

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

¡Excelente! eso hace el truco – jonas87

+2

@ jonas87 - De nada, y bienvenido a SO! Si esta respuesta resolvió su problema, haga clic en la marca de verificación al lado, para que otros en el futuro que vean esta pregunta sabrán que resolvió su problema ... – joran

Cuestiones relacionadas