【问题标题】:loop in R doesn't workR中的循环不起作用
【发布时间】:2017-09-25 07:35:41
【问题描述】:

我正在尝试循环多个时间序列以使用季节性包,虽然代码对于单个系列来说工作得很好,但循环不会继续,我得到这样的结果

    i = `i'+1
+ }
+

知道下面的代码有什么问题吗?我将不胜感激任何指针。谢谢。

i=1
while i<=79 {
  rm(list=ls()) #clear workspace
  sad <- read.dta("C:/esample`i'.dta")
  sad <- data.frame(sad)
  ts<- lapply(sad,ts,frequency=12, start=1960.1) 
  l1 <- lapply(ts, function(e) try(seas(e, na.action = na.x13) ))
  is.err <- sapply(l1, class) == "try-error"
  d_sad <- data.frame(do.call(cbind, lapply(l1[!is.err], final)))
  save.image("C:/dsad`i'.RData")
  write.dta(d_sad, "X:/dsad`i'.dta")
  i = `i'+1
}

【问题讨论】:

  • 您删除了索引i。我怀疑是否有必要在开始时清除工作区;但你可能想 rm(sad, ts, ...) 最后。或者,您可能希望将其包装在一个函数中..
  • Stata (`i') 的本地语法不会延续到 R。

标签: r loops while-loop


【解决方案1】:

据我所知,似乎有两个问题。

1.while 条件需要放在括号中。例如:

while(i <= 79) {...

2.您推进循环的部分不正确,当您不需要任何引号时,您有引号(实际上是两种不同的类型,这就是它要求额外输入的原因)。您只需要:

i = i + 1

【讨论】:

  • 他们应该使用for 循环。
【解决方案2】:

感谢您的帮助。这有效:

    mywd=setwd
    i=1
    while (i<=20) {
      infile <- paste("esample",i,".dta",sep=""); 
outfileR<- paste("dsad",i,".RData",sep="")
      outfile <- paste("dsad",i,".dta",sep=""); 
      sad <- read.dta(infile)
      sad <- data.frame(sad)
      ts<- lapply(sad[-1],ts,frequency=12, start=1960.1)
      l1<- lapply(ts, function(e) try(seas(e, na.action = na.x13) ))
      # list failing models
      is.err <- sapply(l1, class) == "try-error"
      # return final series of successful evaluations
      d_sad1 <- data.frame(do.call(cbind, lapply(l1[!is.err], final)))
      write.dta(d_sad1, outfile)
      save.image(outfileR)
      rm(sad, ts, infile, outfileR, outfile, is.err, d_sad, d_sad1, l1) 
      i = i+1
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-18
    • 2011-07-21
    • 1970-01-01
    • 2012-07-21
    • 2015-01-05
    • 1970-01-01
    • 2014-12-25
    • 2016-05-24
    相关资源
    最近更新 更多