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

Как решить проблему "переполнение стека защиты" в R Studio

Я пытаюсь создать модель с пакетом glmnet, но я получаю следующую ошибку, когда запускаю следующую строку:

#library('glmnet')
x = model.matrix(response ~ ., data = acgh_frame[,c(3:ncol(acgh_frame))])

Error: protect(): protection stack overflow

Я знаю, это связано с моим большим количеством переменных (26k +) в dataframe. Когда я использую меньше переменных, ошибка не отображается. Я знаю, как решить это в командной строке R, но мне нужно остаться в студии R, поэтому я хочу исправить ее из R Studio. Итак, как мне это сделать?

4b9b3361

Ответ 1

@Ansjovis86

Вы можете указать ppsize в качестве аргумента командной строки для Rstudio

rstudio.exe --max-ppsize=5000000

Вы также можете установить параметр выражения через .Rprofile или во время выполнения с помощью команды options(expressions = 5e5).

> options(expressions = 5e5)
>?options

...

выражения:

устанавливает ограничение на количество вложенных выражений, которые будут оцениваться. Допустимые значения: 25... 500000 по умолчанию 5000. Если вы увеличите его, вы также можете запустить R с большим стеком защиты; см. --max-ppsize в памяти. Также обратите внимание, что вы можете вызвать segfault из C, а в ОС, где это возможно, вы можете увеличить его. Как только предел достигнут, выдается ошибка. Текущее оцениваемое число можно найти, вызвав Cstack_info.

Cstack_info() - to determine current setting.s

Ответ 2

Коренной причиной является функция model.matrix, которая будет 1) использовать много памяти; и 2) выбросить эту ошибку для достаточно большого нет. столбцов.

Попробуйте использовать мой пакет glmnetUtils, который обойдет обе эти проблемы. Вместо того, чтобы строить модельную матрицу за один раз, она делает это терминально; и он также не пытается оценивать огромные формулы. Это намного быстрее и не рискует взорвать стек.

install.packages("glmnetUtils")
library(glmnetUtils)
glmnet(response ~ ., data = acgh_frame[3:ncol(acgh_frame)])