我正在尝试模拟一些数据并使用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
有更好的方法吗?
答案 0 :(得分:2)
虽然问题在评论中已经解决,但我想更详细地解释一下:
在R中,可以为自定义函数提供内置函数的名称或来自其他软件包的函数,而不会被警告:
mean <- function(x) {print("I am mean")}
> mean(5)
[1] I am mean
在您的情况下,您会从step
覆盖package:stats
的定义。此外,您在step
内拨打step
。这称为递归。 R中的递归解释为例如here。
根据数据量和递归级别,这可能会以(几乎)完整的堆栈结束。