Программа должна удалить строк из pts
. Я хотел бы использовать вложенный оператор %:%
вместо вложенных циклов for
, если это возможно, но я не уверен, как использовать rbind / append в удалении способом (например, если x=0.1,y=0.15
удаляет 3 строки и x=0.5,y=-0.25
удаляет 3 разных строки, тогда на выходе в конце будет как минимум на 6 строк меньше.
library(raster)
library(sf)
library(dplyr)
require(data.table)
shiftReduceRaster = function (x, y) {
r <- raster::shift(r, x*xres(r), y*yres(r))
# get cell numbers
cells <- cellFromXY(r, pts)
# pick one point per cell
sel <- aggregate(pts, list(cells), function(i)i[1])
assign("pts", sel[,c("X", "Y",'id')], envir = .GlobalEnv)
}
sort_abs <- function(x, na.last = TRUE, decreasing = FALSE) {
x[order(abs(x), na.last = na.last, decreasing = decreasing)]
}
shiftIntervals = sort_abs(seq(from = -1, to = 1, by = 0.05)) # start with 0,0
df1 = fread(file = '~/test.csv',na.strings = '')
pts <- df1[,c("X", "Y",'id')]
r = raster(ncol=36000, nrow=18000, vals=1) # takes 8GB of RAM
for (x in shiftIntervals) {
for (y in shiftIntervals) {
shiftReduceRaster(x, y)
}
gc()
}
rm(r)
gc()
fwrite(pts, file = '~/output.csv')
Можно ли использовать rapply или это? Преобразование вложенных циклов в foreach в R?
он может обрабатывать параллельно и затем выводить pts
только идентификаторы, которые существуют во всех 41 ^ 2 выходах
some пример данных: https://gist.github.com/chapmanjacobd/7d51f5498e30683c384d12dbd1bf845e