RcppArmadillo + bigmemory аварийно завершает работу Windows RStudio (но без другого GUI + OS.type)
Я работаю над пакетом R, bigKRLS
, bigKRLS
работает на Windows RGui, но сталкивается с фатальной ошибкой на Windows RStudio. Некоторые детали...
Windows RGui работает, но Windows RStudio сталкивается с фатальной ошибкой; подтверждено на четырех разных машинах с использованием R 3.3.0, 3.3.1, 3.3.3; RTools 3.3 и 3.4 в соответствии с лучшими практиками, рекомендованными профессором Coatless; RStudio 1.0.136; Windows 7 и 8. В настоящее время bigKRLS
работает на RStudio для Mac OS X Yosemite и Ubuntu 14.04 без проблем.
bigKRLS
зависит от bigmemory
, Rcpp
, RcppArmadillo
, а также snow
(но проблема предшествует недавнему добавлению snow
, который можно отключить для тестирования, установив bigKRLS(..., Ncores = 1)
).
devtools::install_github('rdrr1990/bigKRLS')
library(bigKRLS)
vignette("bigKRLS_basics")
set.seed(2017)
X <- matrix(runif(60), ncol=3)
y <- X %*% 3:1 + rnorm(20)
out <- bigKRLS(y, X)
summary(out)
Приведенный выше код дает оценки моделей, начинающиеся с R2 = 0,663 (мы, конечно, оценили намного более сложные модели на других платформах).
Windows RStudio загружает library(bigKRLS)
без предупреждения; bigKRLS()
выводит, что он успешно очистил данные. Среди прочего, это означает, что у и Х сейчас big.matrix objects
, Тогда первый "настоящий" шаг: bigKRLS()
звонки bGaussKernel()
где сеанс прерывается через две минуты или около того. Но в этом нет ничего плохого bGaussKernel()
, bGaussKernel()
работает нормально, если вызывается из командной строки менее чем за секунду. На самом деле, если вы инициализируете каждую переменную, которая bigKRLS()
требует, вы можете запустить весь его код в Windows RStudio.
В настоящее время пакет определяет, когда используется Windows RStudio, и безопасно выходит из функции, направляя пользователей вместо этого в RGui. Будем очень благодарны за любые предложения относительно лучшего обходного пути!
1 ответ
Во-первых, проблема в Windows не связана с компилятором. Если вам удалось правильно установить RTools, то все в порядке с использованием RGUI. Вместо этого проблема, которую вы испытываете, заключается в использовании Boost RStudio для их приложений, которые случайно загрязняют вызовы boost
пространство имен, предоставленное BH
пакет в rsession
процесс. RStudio, тем более @kevinushey, недавно решил эту проблему, создав пользовательскую сборку Boost для RStudio, которая находится внутри rstudio_boost
, Подробности и решение этой ошибки можно найти более подробно на https://github.com/rstudio/rstudio/pull/1061.
Короче говоря, если это действительно так, просто проверьте, является ли версия RStudio >=1.1.129
будет достаточно. Для этого сначала нужно получить ежедневную версию RStudio. Имея это в виду, мы можем сослаться на решение, полученное @DirkEddelbuettel для его невероятного пакета в любое время, который работал над этой проблемой. В частности, чтобы преодолеть это, он добавил короткий isRStudio()
функция при загрузке пакета и вызывает функцию каждый раз перед передачей данных в C++.
isRStudio()
Функция @DirkEddelbuettel использует как:
isRStudio <- if (Sys.getenv("RSTUDIO", unset="0") == "1" &&
exists("RStudio.Version") &&
## the following is evil but keeps R CMD check off our back
eval(parse(text=paste("RStudio.Version()$Version",
">=", "\"1.1.129\"")))) TRUE else FALSE
Примечание: использование eval(parse(text=...))
чтобы избежать проблем с проверкой пакетов, таких как...
.onLoad: no visible global function definition for ‘RStudio.Version’
Undefined global functions or variables:
RStudio.Version