如何解决';保护堆栈溢出';R工作室中的问题

如何解决';保护堆栈溢出';R工作室中的问题,r,stack-overflow,glmnet,R,Stack Overflow,Glmnet,我正在尝试使用glmnet包构建模型,但在运行以下行时出现以下错误: #library('glmnet') x = model.matrix(response ~ ., data = acgh_frame[,c(3:ncol(acgh_frame))]) Error: protect(): protection stack overflow 我知道这是因为我在数据帧中有大量变量(26k+)。当我使用较少的变量时,错误不会显示。我知道如何在命令行R中解决这个问题,但我需要留在R studio中

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

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

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

@Ansjovis86

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

rstudio.exe --max-ppsize=5000000
您还可以通过
.Rprofile
设置表达式选项,或在运行时使用
选项(expressions=5e5)
命令设置表达式选项

> options(expressions = 5e5)
>?options

表达方式:

设置要计算的嵌套表达式的数量限制。有效值为25…500000,默认值为5000。如果您增加它,您可能还想用一个更大的保护堆栈启动R;请参阅--内存中的最大ppsize。还要注意的是,您可能会因为C堆栈溢出而导致SEGFULT,在可能的操作系统上,您可能希望增加该值。一旦达到限制,就会抛出一个错误。通过调用
Cstack\u info
可以找到当前正在评估的号码

Cstack_info() - to determine current setting.s

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

尝试使用我的glmnetUtils包,它将解决这两个问题。它不是一次性建立模型矩阵,而是逐项进行;而且它也不尝试计算庞大的公式。这要快得多,而且不会有炸毁堆栈的风险

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

使用PCR或PLSR减少列数

使用“命令行R”时,您的解决方案是什么?用以下参数开始R:R--max ppsize 500000所以,您实际的问题是如何在RStudio中设置命令行选项?或者可能是如何从R内或感兴趣的函数内指定这些选项。是的。对罗兰来说,是的,如果可能的话……我可以用这个来拟合决策树吗?