1
私はこのコードを持っており、私は最適化を知らないので、それは私の最高のパフォーマンスだと思います。あなたはオプトマイゼーションリストのために道を開いていますか?大きなリストの最適化
require(dplyr); require(rgeos); require(sp)
sim.polygons = function(objects, vertex){
polygons = NULL
for(i in 1:objects) polygons[[i]] = matrix(runif(vertex*2), ncol = 2)
return(polygons)
}
test = function(lista1, lista2, progress = F){
lista1 = lapply(lista1, as, Class = "gpc.poly")
lista2 = lapply(lista2, as, Class = "gpc.poly")
res = matrix(0, nrow = length(lista2), ncol = length(lista1))
for(k in 1 : length(lista1)){
for(l in 1 : length(lista2)){
res[l, k] = area.poly(intersect(lista1[[k]], lista2[[l]])) #very slow
}
if(progress == T) print(k)
}
res
}
#exemple
a = sim.polygons(50, 3) #in my problem, objects = 144 and vertex = 3
b = sim.polygons(100, 3) #objects = 114^2 and vertex = 3
test(a, b, T)
一般に、 'for'ループをRのベクトル化された操作に切り替えるほうが速いことがあります。ネストされた' for'ループを、はるかに高速なベクトル化された操作に変換する方法を示す2つのチュートリアルがあります。http ://www.r-bloggers.com/how-to-use-vectorization-to-streamline-simulations/&https://www.datacamp.com/community/tutorials/tutorial-on-loops-in-r –