如何解决R Studio中的“保护堆栈溢出”问题

时间:2015-09-28 15:44:44

标签: r stack-overflow rstudio glmnet

我正在尝试使用glmnet包构建模型,但是当我运行以下行时出现以下错误:

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

Error: protect(): protection stack overflow

我知道这是由于我在数据帧中存在大量变量(26​​k +)。当我使用较少的变量时,错误不会显示。我知道如何在命令行R中解决这个问题,但我需要留在R studio中,所以我想从R Studio修复它。 那么,我该怎么做呢?

3 个答案:

答案 0 :(得分:5)

@ Ansjovis86

您可以将ppsize指定为Rstudio的命令行参数

rstudio.exe --max-ppsize=5000000

您也可以通过.Rprofile或在运行时使用options(expressions = 5e5)命令设置表达式选项。

> options(expressions = 5e5)
>?options

...

<强> 表达式:

设置将要计算的嵌套表达式数量的限制。有效值为25 ... 500000,默认值为5000.如果增加它,您可能还需要使用更大的保护堆栈启动R;请参阅内存中的--max-ppsize。另请注意,您可能会导致C堆栈溢出的段错误,并且在可能的情况下,您可能希望增加它。达到限制后,将引发错误。可以通过调用Cstack_info找到当前正在评估的号码。

Cstack_info() - to determine current setting.s

答案 1 :(得分:0)

根本原因是model.matrix函数,它将1)使用大量内存; 2)将此错误抛给足够大的no。列。

尝试使用我的glmnetUtils包,它将解决这两个问题。它不是一次性构建模型矩阵,而是按术语来表示;它也不会尝试评估大型公式。这是一个 lot 更快,并没有冒险炸毁堆栈的风险。

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

答案 2 :(得分:0)

使用PCR或PLSR减少色谱柱