2017-04-27 35 views
-5

我想遍历多个时间序列,以使用季节性封装,而代码工作得很好,各个系列,循环不继续,我得到这样的环路R不工作

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 
} 
+1

您删除索引'我'。我怀疑一开始就需要清理工作区;但最后你可能想要(悲伤,ts,...)。或者,你可能想把它包装在一个函数中。 – Frank

+3

Stata('''i'')的本地语法不会传递给R. – lmo

回答

0

似乎有两个问题,我可以看到。

1.The条件需要在括号内。 e.g:在这里你推进循环是不正确

while(i <= 79) {... 

2.部分,你有引号(两种不同的实际,这就是为什么它被要求额外的输入),当您不需要任何报价。所有你需要的是:

i = i + 1 
+0

它们应该使用'for'循环。 – Roland

+0

非常感谢!这工作。 –

0

感谢您的帮助。这工作:

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 
    }