合并在R中的for循环中不起作用

时间:2017-02-02 17:37:52

标签: r

我有一个列表形式的时间序列数据,其定义如下

[[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))
}

为什么会发生这种情况,哪些可能是相同的

1 个答案:

答案 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