R と、さらに重要なベクトル化については、まだ耳の後ろにかなり濡れているため、以下のコードを高速化する方法について頭を悩ませることはできません。
for ループは、種子ごとにランダムな確率を適用することにより、種子を生成する植物の密度が異なるいくつかの道路セグメントの道路に落ちる種子の数を計算します。私の実際のデータ フレームには最大 20 万行あり、シード数はセグメントあたり最大 30 万なので、現在のマシンで以下の例を使用すると数時間かかります。
#Example data.frame
df <- data.frame(Density=c(0,0,0,3,0,120,300,120,0,0))
#Example SeedRain vector
SeedRainDists <- c(7.72,-43.11,16.80,-9.04,1.22,0.70,16.48,75.06,42.64,-5.50)
#Calculating the number of seeds from plant densities
df$Seeds <- df$Density * 500
#Applying a probability of reaching the road for every seed
df$SeedsOnRoad <- apply(as.matrix(df$Seeds),1,function(x){
SeedsOut <- 0
if(x>0){
#Summing up the number of seeds reaching a certain distance
for(i in 1:x){
SeedsOut <- SeedsOut +
ifelse(sample(SeedRainDists,1,replace=T)>40,1,0)
}
}
return(SeedsOut)
})
ループをベクトル化で置き換える方法、またはパフォーマンスを向上させるためにデータをより適切に編成する方法について誰かがヒントをくれたら、とても感謝しています!
編集:ローランドの答えは、私が質問を単純化しすぎた可能性があることを示しました。for ループでは、別の作成者によって記録された距離の分布からランダムな値を抽出します (そのため、ここでデータを提供できません)。SeedRain 距離の可能性が高い値を持つ例示的なベクトルを追加しました。