0

重複の可能性:
R を使用して階層または k-means クラスター分析を適用する方法は?

列数が同じで行数が異なる次の 4 つの行列を考えます。

library(gtools)

m1 <- matrix(sample(c(-1, 0, 1), 15, replace=T), 3)
m2 <- matrix(sample(c(-1, 0, 1), 25, replace=T), 5)
m3 <- matrix(sample(c(-1, 0, 1), 25, replace=T), 5)
m4 <- matrix(sample(c(-1, 0, 1), 30, replace=T), 6)   
rownames(m1) <- c(1:3)
rownames(m2) <- c(4:8)
rownames(m3) <- c(9:13)
rownames(m4) <- c(14:19)

hclust()次の形式に並べると、これらの 4 つの行列に適用したいと思います。

mat <- list(m1, m2, m3, m4)

unite <- rbind(m1,m2,m3, m4)
rownames(unite) <- c(1:19)
distUnite <- as.matrix(dist(unite, method="manhattan"))

## empty matrix for storing the distance between pairwise matrices
dist4m <- matrix(0, nrow=4, ncol=4)
indices <- combinations(4,2)
distance <- apply(indices, 1,
                  function(pair){
                      print(pair)
                      s1=pair[1]
                      s2=pair[2] 
                      pairmean <- mean(distReads[which(m$Sample==samples[s1]), which(m$Sample==samples[s2])])

                      dist4m[s1,s2] <<- pairmean
                      dist4m[s2,s1] <<- pairmean
                  })

print(dist4m)
## then use hclust(), and plot()     

上記のスクリプトは機能するはずですが、より効率的で信頼性の高い解決方法があるかどうか疑問に思っています。

アドバイスありがとうございます。

4

1 に答える 1

5

それらをグループ化します(cbindして塗りつぶしたいと思います):

m.list <- list(m1,m2,m3,m4)
n <- max(sapply(m.list, nrow))
m.all <- do.call(cbind, lapply(m.list, function (x)
rbind(x, matrix(, n-nrow(x), ncol(x))))) 

m.dist <- dist(m.all)
m.hclust <- hclust(m.dist)
plot(m.hclust)

ここに画像の説明を入力

個別に:

m1 <- matrix(sample(c(-1, 0, 1), 15, replace=T), 3) 
m2 <- matrix(sample(c(-1, 0, 1), 25, replace=T), 5)
m3 <- matrix(sample(c(-1, 0, 1), 25, replace=T), 5)
m4 <- matrix(sample(c(-1, 0, 1), 30, replace=T), 6)

m1.dist <- dist(m1)
m2.dist <- dist(m2)
m3.dist <- dist(m3)
m4.dist <- dist(m4)

m1.hclust <- hclust(m1.dist)
m2.hclust <- hclust(m2.dist)
m3.hclust <- hclust(m3.dist)
m4.hclust <- hclust(m4.dist)

plot(m1.hclust)
plot(m2.hclust)
plot(m3.hclust)
plot(m4.hclust)

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

于 2012-10-17T06:42:31.260 に答える