模拟数据和C堆栈使用情况

时间:2017-11-02 20:16:30

标签: r

我正在尝试模拟一些数据并使用step函数。首先,我生成一个1000 X 101维数据框。

library(broom)

    data_func <- function(n=1000*101) {
      data <- matrix(rnorm(n),1000,101)
      data.frame(data)
    }

然后我创建一个函数,使用step通过前向逐步选择来选择模型,并提取所选模型的F检验的p值。

step <- function(d) {
  sfit <- step(lm(X1 ~.,data=d))
  glance(sfit)$p.value
}

我想从100次重复的模拟中提取p值,所以我有:

pvalues_step <- raply(100,step(data_func()))

但我明白了:

Error: C stack usage  7969512 is too close to the limit

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

虽然问题在评论中已经解决,但我想更详细地解释一下:

在R中,可以为自定义函数提供内置函数的名称或来自其他软件包的函数,而不会被警告:

mean <- function(x) {print("I am mean")}

> mean(5)
[1] I am mean

在您的情况下,您会从step覆盖package:stats的定义。此外,您在step内拨打step。这称为递归。 R中的递归解释为例如here

根据数据量和递归级别,这可能会以(几乎)完整的堆栈结束。