我有一个列表形式的时间序列数据,其定义如下
[[1]] [[1]] [1]"产品名称"
[[1]] [[2]] [1] 20031031"开始时间"
[[1]] [[3]] [1] 20160831"结束持续时间"
[[1]] [[4]] [1] 0.040816323 0.010141988 0.050318689 0.012804102 0.011378003 "一系列观察"
我试着用以下方法合并两个系列:merge(as.zoo(TS1),as.zoo(TS2))
当它不在循环内时功能正常,并且在for循环中使用时失真
startYear = as.numeric(substr(unlist(TimeSeries[[1]][2]),1,4))
startMonth = as.numeric(substr(unlist(TimeSeries[[1]][2]),5,6))
TS1 = ts(unlist(TimeSeries[[1]][4]), start = c(startYear,startMonth),
frequency = 12)
TS2 = ts(unlist(TimeSeries[[2]][4]), start = c(startYear,startMonth),
frequency = 12)
M <- merge(as.zoo(TS1), as.zoo(TS2))
上述合并中未见任何问题
在For循环中使用相同代码时出现的问题,
for(I in 1:1)
{
M <- merge(as.zoo(TS1), as.zoo(TS2))
}
为什么会发生这种情况,哪些可能是相同的
答案 0 :(得分:0)
我认为合并工作正常。
给出以下代码:
library("zoo")
a = as.zoo(ts(rnorm(5), start = 1981, freq = 12))
b = as.zoo(ts(rnorm(10), start = 1981, freq = 12))
merge(a,b)
for(I in 1:1){
merge(a,b)
}
只有第一个merge(a,b)
会打印到控制台 - 为了在for循环中打印到控制台,您需要明确调用print
。
你可以通过执行:
来看到这一点for (I in 1:1){
1:10
}
和
for (I in 1:1){
print(1:10)
}
这并不意味着循环内的代码不会被执行!
请参阅以下代码的输出:
library("zoo")
a = as.zoo(ts(rnorm(5), start = 1981, freq = 12))
b = as.zoo(ts(rnorm(10), start = 1981, freq = 12))
new1 <- merge(a,b)
for(I in 1:1){
new2 <- merge(a,b)
}
new1
new2
输出:
a b
1981(1) 0.2137495 -0.4148458
1981(2) -0.1298899 -0.4880588
1981(3) 0.2452036 0.1619693
1981(4) -0.2251848 0.4866681
1981(5) 1.1049321 1.2171081
1981(6) NA -0.5852703
1981(7) NA 1.5238886
1981(8) NA -0.7583958
1981(9) NA -0.2972132
1981(10) NA -0.4476471
a b
1981(1) 0.2137495 -0.4148458
1981(2) -0.1298899 -0.4880588
1981(3) 0.2452036 0.1619693
1981(4) -0.2251848 0.4866681
1981(5) 1.1049321 1.2171081
1981(6) NA -0.5852703
1981(7) NA 1.5238886
1981(8) NA -0.7583958
1981(9) NA -0.2972132
1981(10) NA -0.4476471