Вы можете сделать что-то в этом направлении, чтобы избежать проблем с памятью
library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
outfile <- 'out.csv'
if (file.exists(outfile)) file.remove(outfile)
tr <- blockSize(b)
b <- readStart(b)
for (i in 1:tr$n) {
v <- getValues(b, row=tr$row[i], nrows=tr$nrows[i])
write.table(v, outfile, sep = ",", row.names = FALSE, append = TRUE, col.names=!file.exists(outfile))
}
b <- readStop(b)
Чтобы распараллелить, вы можете сделать это по слою или группам слоев;и, вероятно, все значения за один шаг для каждого подмножества слоев.Здесь для одного слоя за раз:
f <- function(d) {
filename <- extension(paste(names(d), collapse='-'), '.csv')
x <- values(d)
x <- matrix(x) # these two lines only needed when using
colnames(x) <- names(d) # a single layer
write.csv(x, filename, row.names=FALSE)
}
# parallelize this:
for (i in 1:nlayers(b)) {
f(b[[i]])
}
или
x <- sapply(1:nlayers(b), function(i) f(b[[i]]))
Вы должны не использовать extract
.У меня вопрос, для чего вам нужен такой большой CSV-файл.