並行處理I具有大的柵格(> 20 GB),並希望每個轉換成CSV文件的特殊格式如下:轉換rasterstack到csv中的R
unique_key_column
x_coordinate
y_coordinate
layer1_values
layer2_values
等
library(raster)
r <- raster(nrows=10,ncols=10)
r[] <- rnorm(10)
stack <- stack(r,r,r,r,r)
#create function to convert coordinate to special format
# -34.9 will be 1034900000
# sxxxdddddd, where s= sign (-=1, +=2), x=degrees (34=034),
# and d = decimal (.9=900000)
formatCoordinate <- function(x){
first_part <- ifelse(x < 0 , "1","2")
second_part <- abs(as.integer(x))
#make sure 3 part has 6 decimal places, then convert it to string
third_part <- substr(gsub(".+\\.","",as.character(format(round(x, 2),
nsmall = 6))),1,6)
result <- sprintf("%s%03d%s",first_part,second_part,third_part)
result
}
#the actual processing
stack =readAll(stack)
names(stack) <-c("l1", "l2", "l3", "l4", "l5")
#convert rasterStack to dataframe
stackPoints <- as.data.frame(rasterToPoints(stack))
#format x and x coordinates
colX <- formatCoordinate(stackPoints$x)
colY <- formatCoordinate(stackPoints$y)
#combine formatted x and y coordinates to compose a unique key
pK <- paste0(colX, colY)
stackPoints["key"] <- pK
col_idx <- grep("key", names(stackPoints))
stackPoints <- stackPoints[, c(col_idx, (1:ncol(stackPoints))[-col_idx])]
#write results to a csv file
write.table(stackPoints, "r.csv", row.names=F, sep=";", dec=",", append=F)
上面的代碼適用於小型光柵,但對於大型光盤,我無法將堆疊加載到RAM中。 有沒有辦法將我的代碼轉換爲使用並行處理?即讀取光柵並使用多核寫入csv,而不需要將光柵加載到RAM(Mac OSX 10.11和Ubuntu 14.04,每個8核)。 最好的,
什麼是您的操作系統?您需要使用的並行庫取決於操作系統 – C8H10N4O2
感謝您的提示。我有Mac El-Captain和Ubuntu(在兩臺不同的計算機上)。我在問題中添加了這個細節:D – user22364
請參閱[這裏](https://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf)開始。 – C8H10N4O2