R を学習する途中で、私は自分自身に少し挑戦しました。問題は、平均が 20 の正規分布の 500 個の数値のサンプルが与えられた場合、標準偏差が 6 から 10 の場合、20 未満の数値がいくつ得られるかということでした。詳細 各 sd に対して 4 つのサンプルを取得することにしました。だから最後に私が持っている必要があります:
sd6samp1:...
sd6samp2:...
....
sd10samp4:...
うまくいった私の最初のアプローチは次のとおりです。
ddss<-c(6:10) # sd's
sam<-c(1:4) # 4 samples for each
k=0 # counter in 0
for (i in ddss) { # for each sd
for (j in sam) { # for each sample
nam <- paste("sam",i,".",j, sep="") # building a name
n <- assign(nam,rnorm(500, 20, i)) # the great assign function
k <- k+sum(n<=0)
}
print(assign(paste("ds",i,sep=""), k)) # ohh assign you're great
k=0 # reset counter
}
ループする「i」を使用して変数名を作成する方法を探しているときに、「assign」が機能することを発見しましたが、次のようにも述べています。
ただし、いくつかのシミュレーションを計画している場合、多くの専門家はリストを使用する必要があると言うことに注意してください。
だから、リストを学ぶのはいいと思う...
その間、私は他の素晴らしいオプションも発見しました... ddss <- c(6:10)
for (i in ddss) {
print(paste('prob. x<=0), with sd=',i))
print(pnorm(0,mean=20,sd=i)*500)
}
これは質問に答えるのに役立ちましたが、リストはまだ作成されていませんでした...そして多くのRはまだ学習されていません。主なアイデアは、ネガの確率や数を知ることではなく、R と具体的にはいくつかのループを学ぶことでした。
だから、私は言及されたリストに行こうとしてきました
私の最も近いアプローチは次のとおりです。
ddss<-c(6:10) # sd's to be calculated.
sam<-c(1:4) # 4 samples for each sd
liss<-list() # initializing the list
for (i in ddss) { # for each sd
liss[[i]] <- list()
for (j in sam) { # for each sample
liss[[i]][[j]] <- rnorm(500, 20, i)
print(paste('ds',i,'samp',j,'=',sum(liss[[i]][[j]]<0)))
}
}
これで情報を取得できますが、2 つの問題 (1 & 2) とその他の質問 (3 & 4) について疑問に思っています。
10 個の要素のリストを取得します。6 個の空の要素と、4 個のサブリストがあります。リストの要素 1:4 (sd) を 6:9 の名前 (まさに sd) で操作する方法を見つけることができないようです。
試してみましたが、「for」ループを介してリスト要素に名前を付けることができませんでした。これらの問題に関する洞察は素晴らしいでしょう。
シミュレーションのこのコンテキストで以来。ネストされたリスト (サブリストを含むリスト) と単純な (長い) リストのどちらが優れていると思いますか?
ここで「適用」機能が役立つかどうか疑問に思ったので、次のようなことを試みました。
vbv<-matrix(c(6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9))
lsl<-apply(vbv, 2, function(x) rnorm(500,20,x))
でも、なかなか近寄れそうにない……。
ここまで読んでくれてありがとう!
返信にはもう少し時間がかかるかもしれません;-)。