0

少し調べてみましたが、この問題に対するエレガントな解決策はまだ見つかりません。

「snowfall」パッケージを使用して、複数のコアでシミュレーションを実行しようとしています。これは、sfApply()、sfSapply、または sfLapply() を使用します。「snowfall」を使用する際の複雑さを回避するために、ここでは単純化して、並列の apply()、sapply()、および lapply() 関数について考えてみましょう。

生態学的シミュレーションがあり、その結果はマトリックスとして返されます。簡単に言うと、複数のパッチに広がる個人に対するさまざまなサイズと強度の妨害イベントの影響をシミュレートしています。たとえば、私のシミュレーションの出力は次のようなものです

DisturbancePatchesPercent<-c(.1,.3,.5,.7,.9) #the size (number of patches affected) by a disturbance
PopSize<-matrix(NA,nrow=length(DisturbancePatchesPercent),ncol=5) #results I want outputted
attributes(PopSize)$dimnames<-list(c(),c("Mean","Lower95","Upper95","Disturbance Patches","Disturbance Intensity"))
PopSize[,1]<-rpois(5,6) #making up output for the mean population size
PopSize[,2]<-rpois(5,1) #making up an output for the lower 95% CI
PopSize[,3]<-rpois(5,12) #making up an output for the upper 95% CI
PopSize[,4]<-DisturbancePatchesPercent #Disturbance size
PopSize[,5]<-rep(.3,5) #A uniform disturbance intensity for a given simulation
PopSize

シミュレーション実行からの母集団サイズの 95% 信頼区間の下限と上限だけでなく、平均値もあります。各実行には、擾乱イベントによって影響を受ける長さ (DisturbancePatchesPercent) の数のパッチがあります。1 回の実行では、擾乱の強度は均一です。

適用機能を使用して、複数の異なる外乱強度の下でこのシミュレーションを実行しようとしています。そのため、シミュレーションを関数に入れ、その関数にシミュレートしたい外乱強度のベクトルを渡します。問題は、各擾乱強度の結果行列 (上でシミュレートしたもの) を返す関数を取得する方法がわからないことです。作成される複数のマトリックスの配列を作成する方法を見つけられることを望んでいましたが、それを理解することに失敗しました

何か案は??

一般的な概念を理解するために私が試した再現可能な例を以下に示します。この模擬例に非常に近いものを作成できましたが、最善を尽くして、さまざまなサンプル マトリックスのリストを作成しました。しかし、リスト内の 4 つの要素はすべて同じ名前であるため、個別にアクセスする方法がわかりません。

func<-function(x){
mat<-matrix(1:20,4,5) #fake results matrix
mat.x<-mat*x #multiplying results matrix by given value of x (simulated disturbance intensity)

return(list(mat.x=mat.x))
                            }
x<-c(1,10,25,66) #simulated vector of disturbance intensities
results<-sapply(x,func) #using apply function to pass the vector to the function
results #the results, but all the elements of the list are named identically so I can't call them individually!
4

0 に答える 0