在数据帧子集中循环
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
}
这可能是 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
}