に評価されているツリーリストは逆低くする三角行列をR
[,1] [,2] [,3] [,4]
[1,] 0 0 0 10
[2,] 0 0 6 9
[3,] 0 3 5 8
[4,] 1 2 4 7
アイデアやいくつかのガイダンスに
m = list(1,2:3,4:6,7:10)
の変換について!ご質問があまりにも素朴である場合や追加情報が必要な場合は、辛抱強くお礼申し上げます(喜んで提供します)。
に評価されているツリーリストは逆低くする三角行列をR
[,1] [,2] [,3] [,4]
[1,] 0 0 0 10
[2,] 0 0 6 9
[3,] 0 3 5 8
[4,] 1 2 4 7
アイデアやいくつかのガイダンスに
m = list(1,2:3,4:6,7:10)
の変換について!ご質問があまりにも素朴である場合や追加情報が必要な場合は、辛抱強くお礼申し上げます(喜んで提供します)。
1)lapply
以下がm
の各構成要素にn
ゼロを付加しsapply
結果に整形m
の各成分の最初n
要素を取りマトリックス。最後に、結果の行列の行の順序を逆にします。その後、n:1
の代わりにrev(seq_len(n))
を使用し、ゼロにすることができる
[,1] [,2] [,3] [,4]
[1,] 0 0 0 10
[2,] 0 0 6 9
[3,] 0 3 5 8
[4,] 1 2 4 7
n
場合:与え
n <- length(m)
sapply(lapply(m, c, numeric(n)), head, n)[n:1, ]
:これはm
は三角行列を定義していない場合でも動作します。
2)sapply
も有効です。これは、適切な数のゼロとm
の各逆転要素を付加し、マトリックスに整形:
sapply(m, function(v) c(numeric(n - length(v)), rev(v)))
イリノイチャックベースR方式フォワード
# Create matrix with dimensions defined by the length of your list
mat <- matrix(0, length(m), length(m))
# Fill in desired order
mat[upper.tri(mat, TRUE)] <- unlist(m)
# Order rows
mat[length(m):1, ]
は、ここで考慮すべきもう一つの選択肢です。これはlengths
を使用して最長ベクトルの長さを計算した後、を使用して自動的に行列に単純化します(sapply
など)。
len <- max(lengths(m)) ## What's the longest vector in m?
vapply(m, function(x) {
length(x) <- len ## Make all vectors the same length
rev(replace(x, is.na(x), 0)) ## Replace NA with 0 and reverse
}, numeric(len))
# [,1] [,2] [,3] [,4]
# [1,] 0 0 0 10
# [2,] 0 0 6 9
# [3,] 0 3 5 8
# [4,] 1 2 4 7
あなたはスパース行列(Matrix
パッケージから)を使用している場合、これらも動作します:
> N <- lengths(m)
> sparseMatrix(i=1+length(m)-sequence(N), j=rep.int(N,N), x=unlist(m))
4 x 4 sparse Matrix of class "dgCMatrix"
[1,] . . . 10
[2,] . . 6 9
[3,] . 3 5 8
[4,] 1 2 4 7
これはほとんど上三角行列のイディオムと同じです:
> sparseMatrix(i=sequence(N), j=rep.int(N,N), x=unlist(m))
4 x 4 sparse Matrix of class "dgCMatrix"
[1,] 1 2 4 7
[2,] . 3 5 8
[3,] . . 6 9
[4,] . . . 10
あなたの答えが100倍良いので。数字に戻ってくる数字は本当にやるべきことではありません –
はい、おそらく、私はその便利な機能を紹介してパッケージに隠れていると思います。 – user20650