R упрощает вложенность для l oop, которая удаляет строки из глобальной переменной - PullRequest
1 голос
/ 05 апреля 2020

Программа должна удалить строк из 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...