私が正しくあなたを理解している場合は、我々は使用することができます。
outer(t, t, "<=") + 0L
## operator `"<="` returns TRUE/FALSE logical,
## add an integer 0 to make a 0/1 binary integer matrix
はのは、あなたの参照for
ループと比較して、簡単なテストを持ってみましょう。
set.seed(0); t <- runif(5) ## reproducible data
outer(t, t, "<=") + 0L
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1 0 0 0 1
#[2,] 1 1 1 1 1
#[3,] 1 0 1 1 1
#[4,] 1 0 0 1 1
#[5,] 0 0 0 0 1
Y <- matrix(0, nrow=length(t), ncol=length(t))
for(i in 1:length(t)) {
Y[i, ] <- t[i] <= t
}
Y
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1 0 0 0 1
#[2,] 1 1 1 1 1
#[3,] 1 0 1 1 1
#[4,] 1 0 0 1 1
#[5,] 0 0 0 0 1
同じ結果が得られます。ビンゴ!!
注:
人々はこの回答の編集の歴史を読みました。 sparseMatrix
の方法が示されている。私は当初、疎な行列を使うと考えていました。そして、カラムピボットは効率を改善するでしょうが、そうではありません。ベンチマークでは、outer
は6倍以上高速です。したがって、私はかなり悲しいと感じていますが、私はそれらの大きなチャンクを私の答えの中に入れなければなりません。
コードに 't'を定義していないので、' t'が転置関数であるためコードが機能しません。 –
forループは非常に速いはずですが、上三角または下三角を計算するだけでスピードアップできます:計算/保存の約半分です。 – user20650