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

В настоящее время пакет определяет, когда используется 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
Другие вопросы по тегам