3

これは私が現時点で持っているものです:

weights0 <- array(dim=c(nrow(ind),nrow(all.msim))) 
weights1 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights2 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights3 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights4 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights5 <- array(dim=c(nrow(ind),nrow(all.msim)))
weights0 <- 1 # sets initial weights to 1

素晴らしくて明確ですが、素晴らしくて短くはありません!経験豊富なRプログラマーはこれを別の方法で書くでしょうか?

編集:

また、これを一般化可能にするために、既存の変数に依存するいくつかの重みを作成する確立された方法はありますか?たとえば、パラメータnum.consは5に等しくなります。必要な制約の数(したがって重み)です。これが一般的なプログラミングの問題であると想像してください。解決策があることを確認してください。

4

3 に答える 3

9

オプション1

for環境内にさまざまな要素を作成する場合は、ループと代入を使用して作成できます。その他のオプションは次のとおりsapplyですenvirassign

for (i in 0:5)
    assign(paste0("weights", i), array(dim=c(nrow(ind),nrow(all.msim))))

オプション 2

ただし、@ Axolotl9250 が指摘しているように、アプリケーションによっては、多くの場合、これらすべてを単一のリストに含めることが理にかなっています

weights <-  lapply(rep(NA, 6), array, dim=c(nrow(ind),nrow(all.msim)))

weights0次に、上記のようにに割り当てるには、次を使用します

weights[[1]][ ] <- 1  

[ ] のすべての要素に割り当てることが重要な空に注意してくださいweights[[1]]


オプション 3

@flodel の提案に従って、すべての配列が同じ次元である場合、オブジェクトの数に等しい長さの余分な次元を持つ 1 つの大きな配列を作成できます。(つまり、6)

weights <- array(dim=c(nrow(ind),nrow(all.msim), 6))

どのオプションについても、次の点に注意してください。

配列のすべての要素に割り当てたい場合は、空の括弧を使用する必要があります。たとえば、オプション 3 で 1 番目の配列に割り当てるには、次を使用します。

weights[,,1][] <- 1
于 2013-02-25T00:36:22.337 に答える
6

私はこれを達成しようとしましたが、喜びはありません。おそらく他の誰かが私よりも優れているかもしれません(おそらく!!)。ただし、すべての配列を単一のオブジェクト、リストに入れる方が簡単かもしれないと感じずにはいられません。そうすれば、単一のラップラインで実行でき、weights1 weights2 weights3 weights4それを参照する代わりにweights[[1]] weights[[2]] weights[[3]] weights[[4]]. これらの配列に対する将来の操作も、関数の apply ファミリによって実現されます。申し訳ありませんが、あなたが説明したとおりに正確に取得できません。

于 2013-02-25T00:24:49.657 に答える
2

何をしようとしているのかを考えると、forループを使用するだけですばやく直感的に使用できます

# create a character vector containing all the variable names you want..
variable.names <- paste0( 'weights' , 0:5 )

# look at it.
variable.names

# create the value to provide _each_ of those variable names
variable.value <- array( dim=c( nrow(ind) , nrow(all.msim) ) )

# assign them all
for ( i in variable.names ) assign( i , variable.value )

# look at what's now in memory
ls()

# look at any of them
weights4
于 2013-02-25T00:34:32.487 に答える