2017-11-29 37 views
0

私はフォーラムとrには新しく、だからこそコードを許してください。要するにR:ランダム生成Forループのためのリストからのパラメータ引数の反復

、私はに正規分布を取得しようとしています繰り返しこれらのパラメータを使用してランダムなサンプルの30x10000行列を生成するためにループで使用するために二つのリストから引き出されたパラメータを使用します。

最初のリスト(List1)は数値ベクトルの集合です。 2番目のリスト(List2)には、rnormの標準偏差引数に使用したい値があります。つまり、List1の標準偏差からのベクトル1はList2のValue1です。

set.seed(1500) #set up random gen 
var1 = rnorm(1:1000, mean = #mean of vector(i) from list1, sd = #value(i) from List2) 
sample(var1,size=1) 
X = matrix(ncol = 30, nrow = 10000) 
for(j in 1:length(var1)){ #simulates data using parameters set by rnorm var1 function 
    for(i in 1:10000){ 
    X[i.j] = sample(var1,1) 
    } 
} 

ここには、このコードが影響を受けているpostがあります。

乾杯!

答えて

0

mapply()はあなたを助けるだろうと思われる:

# First let's turn the list1 into means. 
dist.means = lapply(list1,mean) 

Lapplyは、リスト内のすべての要素に対して関数を実行する方法です。 Mapplyは非常によく似た方法で動作しますが、複数のリストを使用します。

samples = mapply(rnorm, 30*10000, dist.means, list2,SIMPLIFY=F) 

もう少し説明:mapply()実行rnorm()複数回。最初の試みでは、最初の引数の最初の要素、2番目の引数の最初の要素などを使用して実行されます。この場合、rnorm(30*10000, dist.means[[1]], list2[[1]])rnorm(30*10000, dist.means[[2]], list2[[2]])が実行され、出力がリストに格納されます。

ここでは小さなトリックを使用しています。最初のリストは30 * 10000という単一の数字です。マッチングするために異なるサイズのリストを与えると、それはより短いリストをリサイクルする。すなわち、長いリストの長さが同じになるまで短いリストを繰り返す。

希望するものは

+0

魅力的なもの。本当にありがとう! – User9123

関連する問題