Возвращает отдельную матрицу для каждого элемента вектора, переданного "apply()"
Немного искал, и еще не нашел элегантного решения этой проблемы.
Я пытаюсь использовать пакет "снегопад" для запуска симуляции на нескольких ядрах. Это использует sfApply(), sfSapply или sfLapply(). Чтобы обойти сложности использования "снегопада", давайте пока упростим и рассмотрим параллельные функции apply(), sapply() и l apply().
У меня есть экологическое моделирование, результаты которого возвращаются в виде матрицы. Короче говоря, я имитирую влияние события беспокойства разных размеров и интенсивности на людей, распределенных по нескольким участкам. Например, результат моей симуляции что-то вроде
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) количество патчей, затронутых событием нарушения. Для одного прогона возмущение имеет одинаковую интенсивность.
Я пытаюсь использовать функцию применения, чтобы запустить это моделирование при нескольких различных интенсивностях возмущения. Итак, я поместил мое моделирование в функцию, а затем передал этой функции вектор интенсивностей возмущений, под которыми я хочу моделировать. Проблема в том, что я не могу понять, как заставить функцию возвращать мне матрицу результатов (как смоделировано выше) для каждой из интенсивностей возмущения. Я надеялся, что смогу найти способ сделать массив из нескольких матриц, который будет создан, но не смог понять это
Есть идеи??
Воспроизводимый пример, который я использовал для выяснения общей концепции, приведен ниже. Я подошел очень близко к этому фиктивному примеру, но лучшее, что я мог сделать, - это создать список различных примеров матриц. Но все четыре элемента в списке имеют одинаковые имена, поэтому я не знаю, как получить к ним доступ по отдельности.
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!