foreach
各ループ内にリストを生成するループと、次.combine
のようにそれらを結合する関数があります。
mergelists = function(x,xn) {
padlen = length(x[[1]])
for (n in names(x)[!names(x) %in% names(xn)]) xn[[n]] = 0
for (n in names(xn)[!names(xn) %in% names(x)]) xn[[n]] = c(rep(0,padlen), xn[[n]])
for (idx in names(xn)) { x[[idx]] = c( x[[idx]], xn[[idx]] ) }
x
}
最初の 2 つの for ループは、新しいリスト ( xn
) を変更して、結果を収集するリスト ( ) と互換性を持たせx
ます。最後の 1 つは と に結合x
しxn
ますx
。
私のコードは途方もなく非効率的だと思います。なぜなら、再割り当てが多く、for ループを使用しているからです。しかし、私はより良い解決策について考えることができません。何か案は?
いくつかの詳細な説明: リスト名は事前にわかりません (それらは foreach 部分で行われるブートストラップ演習のパターンです)。
例:
> x
$foo
[1] 3 2
$bar
[1] 3 2
と
> xn
$foo
[1] 1
$baz
[1] 1
に参加する必要があります
> x
$foo
[1] 3 2 1
$bar
[1] 3 2 0
$baz
[1] 0 0 1
それでおしまい。