Ошибка: использование стека C слишком близко к пределу в среде Windows

Я выполняю геостатистическую интерполяцию в R на матрице 5600 x 5700 и, несмотря на доступную память, получаю сообщение об ошибке «Использование стека C слишком близко к пределу».

Есть несколько вопросов SO, связанных с этой проблемой, включая this один и вот этот. Эти и другие источники, которые я видел в Интернете, предполагают, что изменение размера стека часто решает эту проблему. Некоторые предлагали такое изменение: R_CStackLimit = (uintptr_t)-1 в файле "Rinterface.h". Однако я работаю в Windows 7 (x64), использую R 2.15.3 (x64) через модуль Rpy2 (v 2.3.6 x64 через Christoph Gohlke) в Python 2.7, а "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)

person metasequoia    schedule 02.06.2013    source источник
comment
В вашем коде может быть что-то немного неэффективное: это может быть проще исправить, чем перекомпилировать R (особенно в Windows). Как вы делаете эти интерполяции?   -  person Vincent Zoonekynd    schedule 02.06.2013
comment
Это значение уже установлено по умолчанию ( bitbucket.org/lgautier/rpy2/src/ ). Кстати, какую версию rpy2 вы используете? (import rpy2; print(rpy2.__version__))   -  person lgautier    schedule 02.06.2013
comment
@lgautier - означает ли это, что оптимизация кода - это то, на чем я должен сосредоточиться для обхода? Я обновил свой ответ, включив в него версию rpy2: v2.3.6 x64 от Кристофа Гольке.   -  person metasequoia    schedule 02.06.2013
comment
@metasequoia - Вы также можете уточнить у Кристофа, является ли ограничение стека таким, как я думаю, в Windows (его настройка является условной в коде C для rpy2). В противном случае да. Я думаю, это означало бы, что предел также будет достигнут при запуске этого только в R.   -  person lgautier    schedule 02.06.2013


Ответы (1)


вы можете использовать #include "Rinterface.h" и поместить файл Rinterface.h в тот же файл, что и ваш код C или R.

«Rinterface.h» доступен по адресу: https://svn.r-project.org/R/trunk/src/include/Rinterface.h

person JJsmith    schedule 05.11.2017