Speeding up for-loop over a list
I assume you are using point.in.polygon from the sp package. The function can take any number of points, so you should rewrite your algorithm as a single loop: for each polygon in pols, make a single call to point.in.polygon to check if all the points in coords are inside or not. This should save you a lot of time. Then you'll only have to do a little work reformatting the output. I can help with the code if you can please clarify what coors looks like.

Edit: Here is now an example of how you could code this into a single loop. It is possible you will have to work it a bit as you have not really shown us how you want to store your output.

First, some sample data:

coors &lt;- replicate(5, {n &lt;- sample(5:10, 1);
                       data.frame(x = runif(n), y = runif(n))},
                   simplify = FALSE)

pols &lt;- replicate(3, {n &lt;- sample(5:10, 1)
                      data.frame(x = runif(n), y = runif(n))},
                  simplify = FALSE)


Here, we concatenate all the points in coors together, but keep a vector of group indices which we will use later for splitting by group:

all.coors  &lt;- do.call(rbind, coors)
num.points &lt;- sapply(coors, nrow)
group.idx  &lt;- rep(seq_along(coors), num.points)


Now the single loop:

results &lt;- vector("list", length(pols)) 
for (j in seq_along(pols)) {
   print(j)
   results[[j]] &lt;- split(point.in.polygon(all.coors[,1], all.coors[,2],
                                          pols[[j]][,1], pols[[j]][,2]),
                         group.idx)
}


I am confident this will significantly speed up your computations. However, if this is still too slow, I agree you'll have to consider parallelization. Good luck.