我正在使用5600 x 5700矩阵在R中进行地统计插值,尽管有可用内存,但我收到错误“C堆栈使用率太接近极限。”
有一些与此问题相关的问题,包括this one和this one。我在网上看到的这些来源和其他人建议改变堆栈大小通常可以解决这个问题。有人建议在“Rinterface.h”文件中进行此更改:R_CStackLimit = (uintptr_t)-1
。但是我在Windows 7(x64)上,使用R 2.15.3(x64)通过{2.7}中的Rpy2
模块(v {2.3.6 x64,Christoph Gohlke)和“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)
答案 0 :(得分:0)
您可以使用#include“Rinterface.h”并将文件Rinterface.h放在与C或R代码相同的文件中。
“Rinterface.h”可在以下位置获得: https://svn.r-project.org/R/trunk/src/include/Rinterface.h