为传递给'apply()'的向量的每个元素返回一个单独的矩阵

时间:2012-06-26 16:56:54

标签: r apply snowfall

一直在搜索,但尚未找到解决此问题的优雅方案。

我正在尝试使用'降雪'软件包在多个核心上运行模拟。这使用sfApply(),sfSapply或sfLapply()。为了解决使用“降雪”的复杂问题,我们现在简化一下,只考虑并行的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)受干扰事件影响的补丁数量。对于单次运行,干扰具有均匀的强度。

我正在尝试使用apply函数在多种不同的干扰强度下运行此模拟。所以我将模拟放在一个函数中,然后将该函数传递给我想要模拟的干扰强度矢量。问题是,我无法弄清楚如何让函数返回每个扰动强度的结果矩阵(如上所述)。我希望我能想出一种方法来制作一个可以创建的多个矩阵的数组,但却没有弄清楚

任何想法??

下面是一个可重复的例子,我已经玩弄了这个例子以找出一般概念。我非常接近这个模拟示例,但我能做的最好的事情是创建一个不同的示例矩阵列表。但是列表中的四个元素都具有相同的名称,因此我不知道如何单独访问它们

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!

0 个答案:

没有答案