Подтвердить что ты не робот

Обнаружена ошибка segfault в R

Я получаю ошибку caught segfault каждый раз, когда я пытаюсь запустить любые функции построения графика из пакета ggplot2 (1.0.0). Я пробовал это с помощью qplot, geom_dotplot, geom_histogram и т.д. Данные из пакета (например, diamonds или economics) работают нормально.

Я работаю на Mac OS 10.9.4 (последняя версия) и на R 3.1.1 (также последняя версия). Я получаю ту же ошибку со стандартным R GUI, RStudio и при использовании R из командной строки. Команда вызывает графическое устройство по умолчанию (Quartz for R GUI и командную строку), но также и ошибку терминала.

library(ggplot2)
qplot(1:10)

дает мне ошибку:

*** caught segfault ***
address 0x18, cause 'memory not mapped'

Traceback:
 1: .Call("plyr_split_indices", PACKAGE = "plyr", group, n)
 2: split_indices(scale_id, n)
 3: scale_apply(layer_data, x_vars, scale_train, SCALE_X, panel$x_scales)
 4: train_position(panel, data, scale_x(), scale_y())
 5: ggplot_build(x)
 6: print.ggplot(list(data = list(), layers = list(<environment>),     scales = <S4 object of class "Scales">, mapping = list(x = 1:3),     theme = list(), coordinates = list(limits = list(x = NULL,         y = NULL)), facet = list(shrink = TRUE), plot_env = <environment>,     labels = list(x = "1:3", y = "count")))
 7: print(list(data = list(), layers = list(<environment>), scales = <S4 object of class "Scales">,     mapping = list(x = 1:3), theme = list(), coordinates = list(        limits = list(x = NULL, y = NULL)), facet = list(shrink = TRUE),     plot_env = <environment>, labels = list(x = "1:3", y = "count")))

Possible actions:

 1: abort (with core dump, if enabled)
 2: normal R exit
 3: exit R without saving workspace
 4: exit R saving workspace

Вот моя информация о сеансе:

R version 3.1.1 (2014-07-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] graphics  grDevices utils     datasets  stats     methods   base     

other attached packages:
[1] ggplot2_1.0.0 marelac_2.1.3 seacarb_3.0   shape_1.4.1   beepr_1.1     birk_1.1     

loaded via a namespace (and not attached):
[1] audio_0.1-5      colorspace_1.2-4 digest_0.6.4     grid_3.1.1       gtable_0.1.2    
[6] MASS_7.3-34      munsell_0.4.2    plyr_1.8.1       proto_0.3-10     Rcpp_0.11.2     
[11] reshape2_1.4     scales_0.2.4     stringr_0.6.2    tools_3.1.1

Я собрал от других, что это проблема памяти, но эта ошибка возникает даже тогда, когда у меня более 2 ГБ свободной памяти. Я знаю, что это широко распространенный пакет, поэтому, конечно, это не происходит для всех, но почему это происходит для меня? Кто-нибудь знает, что я могу сделать, чтобы исправить эту проблему?

4b9b3361

Ответ 1

В случае, если у кого-либо еще есть эта проблема или подобное в будущем, я отправил отчет об ошибке для сопровождающего пакета, и он рекомендовал удалить все установленные пакеты и начать все заново. Я принял его совет, и это сработало!

Я следил за советом из этой публикации: http://r.789695.n4.nabble.com/Reset-R-s-library-to-base-packages-only-remove-all-installed-contributed-packages-td3596151.html

ip <- installed.packages()
pkgs.to.remove <- ip[!(ip[,"Priority"] %in% c("base", "recommended")), 1]
sapply(pkgs.to.remove, remove.packages)

Ответ 2

Это не ответ на этот вопрос, но это может быть полезно для кого-то. У меня были segfaults, когда я сделал pdf для создания графического устройства PDF, а затем использовал plot. Это произошло с R 2.15.3, 3.2.4 и одной или двумя другими версиями, работающими на Scientific Linux версии 6.7. Я пробовал много разных вещей, но единственными способами, которыми я мог заставить его работать, было (а) использование png или tiff вместо pdf или (b) сохранение больших файлов .RData, а затем использование полностью раздельного R для создания графики.

Ответ 3

Это не ответ на этот вопрос, но это может быть полезно для кого-то. (Вдохновленный пользователем1310503. Спасибо!)

Я работаю над data.frame df с тремя столбцами: col1, col2, col3. Первоначально

df =data.frame(col1=character(),col2=numeric(),col3=numeric(),stringsAsFactors = F)

В этом процессе rbind используется много раз, например:

aList<-list(col1="aaa", col2 = "123", col3 = "234")
dfNew <- as.data.frame(aList)
df <- rbind(df, dfNew)

Наконец, df записывается в файл через data.table:: fwrite

data.table::fwrite(x = df, file = fileDF, append = FALSE, row.names = F, quote = F, showProgress = T)

df имеет 5973 строки и 3 столбца. "Пойманный segfault" всегда происходит:

address 0x1, cause 'memory not mapped'. 

Решение этой проблемы:

aList<-list(col1=as.character("aaa"), col2 = as.numeric("123"), col3 = as.numeric("234"))
dfNew <- as.data.frame(aList)
dfNew$col1 <- as.characer(dfNew$col1)
dfNew$col2 <- as.numeric(dfNew$col2)
dfNew$col3 <- as.numeric(dfNew$col3)
df <- rbind(df, dfNew)

Тогда эта проблема решена. Возможная причина в том, что классы cols разные.