我在一个5600x 5700的矩阵上用r做地质统计学插值,尽管有可用的内存,我还是得到了错误“c堆栈的使用太接近极限”。
与此相关的问题有几个,包括this onethis one。这些来源和其他我在网上看到的建议,改变堆栈大小往往可以解决这个问题。一些人建议这样做:“rinterface.h”文件中的“R_CStackLimit = (uintptr_t)-1”。不过,我是在Windows7(x64)上,通过Python2.7中的Rpy2模块使用r 2.15.3(x64)(通过Christoph Gohlke使用v2.3.6x64),找不到“rinterface.h”。否则如何更改r的有效堆栈限制?
我为插值运行的代码如下所示(除了我将它包装在函数中):

  d <- read.table(wd,header=TRUE,sep=',')
  d <- na.omit(d)
  coordinates(d) <- ~ longdd+latdd ## convert simple data frame into a spatial data frame object
  proj4string(d) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
  stations <- spTransform(d, CRS(utm19))
  names(stations@data)[1] <- "stations"

  grids <- readGDAL("dem.asc")
  names(grids) <- "dem"
  grids$dsea <- readGDAL("dsea.asc")$band1
  proj4string(grids) <- CRS(utm19)
  ov <- overlay(grids, stations)
  stations$dem = ov$dem
  stations$dsea = ov$dsea

  stations <- stations[!is.na(stations$dsea),]

  vgm <- vgm(model="Sph",range=25000)

  v <- variogram(air_temp_max_c~dem+dsea,stations)
  vgm_max_r<-fit.variogram(v, model=vgm)
  temp_uk <- krige(air_temp_max_c~dem+dsea, locations=stations, newdata=grids, model=vgm_max_r)
  write.asciigrid(temp_uk[1],outmax)
  max_cv <- krige.cv(air_temp_max_c~dem+dsea, locations=stations, vgm_max_r)

  max_cv <-data.frame(max_cv)
  max_cv["date"] <- dt
  max_cv["gs"] <- gs
  max_cv["parameter"] <- "air_temp_max_c"
  write.table(max_cv,file=<outFile>,sep=",",row.names=F)

最佳答案

您可以使用include“rinterface.h”并将文件rinterface.h放在与C或R代码相同的文件中。
“rinterface.h”位于:
https://svn.r-project.org/R/trunk/src/include/Rinterface.h

10-06 10:33