0

私は k*4 次元の行列を持っており、各行は の組み合わせの 1 つであり、(1:20,1:20,1:20,1:20)タイプを指定する quadruplet node です。たとえばk=3、ノードのタイプがここにある3つの四面体があります

X <- matrix(c(1,  3, 1 ,4,
              2,  5, 6 ,1,
              12,20,15 ,3),   3,4,byrow=T) 

ここで、残りの 3 つのノードと接触している各ノードの頻度を記録する 20*8000 の薄暗い頻度テーブルを作成したいと考えています。一方、四つ組の各ノードがどのタイプのノードと接触しているかを知りたいです。

たとえば、最初の行では、F の 1,(1,3,4) 番目と 3,(1,1,4) および 4,(1,1,3) に 1 があります。

私の問題を理解できるように説明できることを願っています。この変換のコードで私を助けてください

注: X マトリックスの最初の行は 1,3,1,4 であるため、出力マトリックス (F) は 1 を記録する必要があります。

F[1,which(colnames(F)=="1 3 4") <- F[1,which(colnames(F)=="1 3 4") +1
F[1,which(colnames(F)=="1 3 4") <- F[1,which(colnames(F)=="1 3 4") +1
F[3,which(colnames(F)=="1 1 4") <- F[3,which(colnames(F)=="1 1 4") +1
F[4,which(colnames(F)=="1 1 3") <- F[4,which(colnames(F)=="1 1 3")+1

これは、各行がその 4 行の周波数行列に 4 つの 1 を追加することを意味し、2、3、または 4 行で同じである可能性があります。たとえば、行 1 で one が繰り返されるため、2 つのレコードを F[1,which(colnames(F)=="1 3 4") に追加します。

4

2 に答える 2

0

私は私の質問に対する基本的な答えを見つけました。しかし、本来あるべき速さではないと思います。

たとえば、薄暗い (3*4) の行列があり、簡単にするために 5 型しかないとします。したがって、この状況の頻度表を見つけるために、次のコードを記述します。

    n <- 5
    k <- dim(X)[1]
    F <- matrix(0,n,n^3)
    colnames(F) <- simplify2array(apply(expand.grid(1:n,1:n,1:n ), 1, paste, collapse =" ", sep = ""))
    for(i in 1:k)
    {
for(j in 1:4){
per <- simplify2array(permn(X[i,-j]))
pert_charac <- apply(per,2,paste,sep="",collapse=" ")
num <- sapply(pert_charac,f <- function(x) which(colnames(F)==x))
F[X[i,j],num] <- F[X[i,j],num]+1
    }
 }
于 2012-10-10T13:52:27.663 に答える
0

私が理解しているかどうか確信が持てません。理解できたとしても、トリプレットを適切に順序付けていないため、これを正しく行っていないため、これは推測です。ベクトル c(3,1,4) はベクトル c(1,3,4) とは異なるはずだと考えています。私がそれについて間違っている場合は、私を修正してください。

20^4 配列を扱うのはかなりやり過ぎだと思ったので、5^4 配列に収まる入力行列を作成しました。

X <- matrix(c(1,  3, 1 ,4,
              2,  5, 2 ,1,
              3,  2, 5 ,4),   3,4, byrow=T) 

各行から一度に 3 つ取得した 4 つの項目の組み合わせを生成し、列優先の方法で配置します。

 array(  apply( X, 1, function(x) combn(x, 3) ), dim=c(3,4,3) )
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    1    1    3
[2,]    3    3    1    1
[3,]    1    4    4    4

, , 2

     [,1] [,2] [,3] [,4]
[1,]    2    2    2    5
[2,]    5    5    2    2
[3,]    2    1    1    1

, , 3

     [,1] [,2] [,3] [,4]
[1,]    3    3    3    2
[2,]    2    2    5    5
[3,]    5    4    4    4
于 2012-10-09T22:56:52.283 に答える