【问题标题】:Loop within dataframe subset在数据帧子集中循环
【发布时间】:2015-05-07 14:20:56
【问题描述】:

这可能是 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


}}

【问题讨论】:

  • 你甚至没有提到这是什么语言/技术。您应该相应地添加一个标签。

标签: r loops subset


【解决方案1】:

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

另外,我很确定你不需要while 之前的括号,只有在之后。就您的代码而言,它不会运行,因为该括号未闭合:您有三个开括号(在while 之前、while 之后和if 之后),但只有两个右括号(我可以找到,无论如何)。

试试这样的:

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

【讨论】:

  • 非常感谢!我认为这很简单,但在任何地方都找不到答案。
  • 没问题,很高兴为您提供帮助!
猜你喜欢
  • 2020-04-03
  • 2013-11-21
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 2021-07-05
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多