私は私と一緒にコードを持っています。このコードはもともとMATLABで書かれていました。私はduet$n
のために、すべての正しい6つの値を取得しています以下のコードでは)MATLABからRへの変換:forループを介して既存の空の配列に値を追加
duet(i).p = [];
2:MATLABで以下のコマンドのためにRで対応するコマンドであるもの
1):私はここに二つの質問を持っていますしかし、私はduet$p
の正しい値を得ていません。私の質問は、ループ内の反復によって、R内の空の既存の配列duet$p[i]
に値を追加する方法です。この行は、以下のコードで動作していない
:
duet$p[i] <- c(duet$p[i],j)
また、私は間違ってduet$p[i] <- array()
を宣言している場合があります。 MATLABからduet.n
とduet.p
ため
値は次のとおりです。Rで
duet.n
2 0 2 0 1 3
duet.p
[] [3,6] [] [1,3,5,6] [1,6] []
、私は正しくduet$n
値を取得していますが、私はduet$p
のために、結果の配列の種類を取得することはできませんよ。
duet$p
値を取得するための助けがあれば幸いです。
x <- matrix(c(-1,2,4,1,7,4.2,3,0,1.2,-1.2,5.1,4,2,3.1,1.1,1,1,9,0,1,2,2,8,1,2,2,2,2,2,2),nrow=6,ncol=5,byrow=T)
fro=1;N=6;M=2;V=3;
F <- list(f=c())
duet = list()
for (i = 1 : N){
duet$n[i] = 0
duet$p[i] = array() ## Create an empty array
for (j in 1 : N){
dl = 0
de = 0
dm = 0
for (k = 1 : M){
if (x[i,V + k] < x[j,V + k]){
dl = dl + 1
} else if (x[i,V + k] == x[j,V + k]){
de = de + 1
} else{
dm = dm + 1
}
}
if (dl == 0 & de != M){
duet$n[i] = duet$n[i] + 1
} else if (dm == 0 & de != M){
duet$p[i] = c(duet$p[i],j)
}
}
if (duet$n[i] == 0){
x[i,6] = 1
F$f = c(F$f,i)
}
}
in
になりました。 2)最終的なサイズを知っているか、見積もっていれば、ループ内のオブジェクトを決して成長させるべきではありません(プログラミング言語で可能な最も遅い操作の1つです)。データ構造を事前に割り当てて入力します。とにかく、Matlabコードの翻訳の代わりに、そのコードが何をしているのかを考え、R-ishの方法で書き直して、Rコードが同じ結果を出すかどうかをテストします。 – Roland