在数据帧子集中循环

Loop within dataframe subset

这可能是 R 中的一个基本问题,但我正在尝试在较大数据框的子集中循环数据。我在 'while' 命令中添加了 'data=sub240' 行,但这会导致括号错误,我怀疑这表明存在更大的问题。谁能告诉我如何 运行 在数据帧的子集上循环?我不认为它是相关的,但我在循环中使用 'optiscale' 包。

{while (rsquared.differ > .00001 && niter <= 30 && data=sub240) {
niter <- niter + 1
reg.os<- lm(dvar.os ~ index.os + educ.os)

rsquared.differ <- summary(reg.os)$r.squared - previous.rsquared
previous.rsquared <- summary(reg.os)$r.squared

record <- c(record, niter, summary(reg.os)$r.squared, rsquared.differ)

if (rsquared.differ > .00001) {
dvar.pred <- predict(reg.os)

opscaled.dvar <- opscale(intknow, dvar.pred, level = 1, process = 1)
dvar.os <- opscaled.dvar$os

intknow240.pred <- (dvar.os - (reg.os$coefficients[1] +
(reg.os$coefficients[4]*educ.os)
))*
(1/reg.os$coefficients[2])

opscaled.intknow240 <- opscale(anes$intknow, intknow240.pred, level = 1, process = 1)
intknow240.os <- opscaled.intknow240$os


}}

data = sub240 是一个赋值语句。您可以在它们自己的行或函数定义和调用中分配事物,但您只能在 while 循环定义中提供逻辑语句。如果你想要逻辑相等,你需要==。但是除非循环中的 data 发生变化并且您希望它成为循环中断的条件,否则您不希望它出现在 while 语句中。但一般来说,无论如何都不需要该声明。 R 中作用域的工作方式,如果 data 在循环外定义,循环应该仍然能够访问它。

此外,我很确定您不需要 while 之前的括号,只需要之后。正如您的代码所代表的那样,它不会 运行 因为该括号未闭合:您有三个左括号(在 while 之前、while 之后和 if 之后),但是只有两个右括号(无论如何我都能找到)。

尝试这样的事情:

data <- sub240
while(rsquared.differ > 0.00001 && niter <=30){
    # do stuff
}