我知道我应该避免 for 循环,但我不太确定如何使用 apply 函数来做我想做的事情。
这是我正在尝试做的事情的一个稍微简化的模型。因此,本质上我有一个很大的预测变量矩阵,并且我想在索引预测变量的每一侧使用 5 个预测变量的窗口来运行回归(i 在 for 循环的情况下)。对于 for 循环,我可以这样说:
results<-NULL
window<-5
for(i in 1:ncol(g))
{
first<-i-window #Set window boundaries
if(first<1){
1->first
}
last<-i+window-1
if(last>ncol(g)){
ncol(g)->last
}
predictors<-g[,first:last]
#Do regression stuff and return some result
results[i]<-regression stuff
}
有没有一个好的方法可以使用 apply 函数来做到这一点?我的问题是,应用的向量将被推入函数中,这实际上并不重要。重要的是索引。
这个问题涉及《The R Inferno》中提出的几个要点http://www.burns-stat.com/pages/Tutor/R_inferno.pdf
您应该避免一些循环,但不是全部。使用 apply 函数更多的是隐藏循环而不是避免循环。这个例子似乎是留在“for”循环中的一个不错的选择。
增长对象通常是不好的形式——在某些情况下效率极低。如果您打算制定一揽子规则,那么“不生长对象”比“避免循环”更好。
您可以通过以下方式创建具有最终长度的列表:
result <- vector("list", ncol(g))
for(i in 1:ncol(g)) {
# stuff
result[[i]] <- #results
}
在某些情况下,您可能会认为该命令:
window<-5
意味着给我一个逻辑向量,说明“window”的哪些值小于-5。
空格很好用,主要是为了不迷惑人类,而是直接得到上面的意思,不迷惑R。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)