我正在尝试创建一个成对表或矩阵,以基于该栅格中记录的环境变量来记录栅格堆栈中每个站点之间的差异,但是即使对于非常小的(〜500x500)栅格,仍然会出现矢量尺寸错误。 / p>
我一直在使用formatsitepair
软件包中的gdm
命令,因为这恰好满足我仅使用几个(〜30)个站点的要求,但是它无法处理栅格中的站点数量
我已经通过创建一个函数来分别选择每个站点对然后运行formatsitepair
并将结果保存到big.matrix
(来自bigmemory
包)中来解决了这个问题。尽管此方法非常笨拙且相当缓慢,但让我感到必须有更好的方法。
我正在使用的栅格堆栈包含两个变量,看起来像:
library(raster)
library(gdm)
library(rgdal)
library(vegan)
> terrain_stck
class : RasterBrick
dimensions : 407, 623, 253561, 2 (nrow, ncol, ncell, nlayers)
resolution : 0.001666667, 0.001666667 (x, y)
extent : 102.5308, 103.5692, -2.237778, -1.559444 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
source : memory
names : elevation, slope
min values : 1, 0
max values : 416.61111, 31.98674
> head(terrain_stck, rows=1)
elevation slope
[1,] 78.25000 2.288101
[2,] 79.66667 2.419253
[3,] 76.58333 3.662052
[4,] 84.36111 6.716446
[5,] 90.52778 7.441800
[6,] 84.66667 6.377585
[7,] 93.47222 5.940339
[8,] 102.75000 4.601474
[9,] 104.02778 6.572758
[10,] 106.36111 5.524489
收到错误消息时我正在使用的formatsitepair
命令是
> gdm_tab <- gdm::formatsitepair(all_cells_env_df,
bioFormat = 1, abundance=F, dist="bray",
siteColumn = "plotIDnum", XColumn = "x",
YColumn = "y",
predData = all_cells_env_df)
Error: cannot allocate vector of size 239.5 Gb
最后我要用来解决当前问题的功能是
runPredictions <- function(x, y, envraster, gdmmodel)
{
## Extract data from raster:
envraster.xy <- rbind(envraster[x,], envraster[y,]) %>% dplyr::select(-cellid)
envraster.xy$plotID <- seq_len(nrow(envraster.xy))
### Select to front and remove lon and lat column:
envraster.xy <- envraster.xy %>% dplyr::select(plotID, everything()) %>% dplyr::select(-lon, -lat)
envraster.m <- as.matrix(envraster.xy, dimnames=names(envraster))
envraster.sp <- envraster.m[,1:4]
gdm.tab <- gdm::formatsitepair(envraster.sp, bioFormat = 1, abundance=F, dist="bray", siteColumn = "plotID", XColumn = "x", YColumn = "y", predData = envraster.m)
## Do predictions:
gdm.tab.pred <- predict.gdm(gdmmodel, gdm.tab, time=FALSE)
return(gdm.tab.pred) ## Write to matrix
}
谢谢。