首页 > 解决方案 > 如果 R 中的语句给出了奇怪的结果

问题描述

我有 741 个值的时间序列,我试图在每个非重叠块中提取其中的最大值。在我的情况下,第一个块包含前 10 个值,第二个包含从第 11 个到第 20 个值,第三个从第 21 个到第 30 个,而最后一个块包含一个值,即第 741 个值。

数据的前三个值:

log_returns <- c(0, 0.00394232277373519, 0.0287804332171326, ...)

我的尝试:

block_maxima = c()
for (i in 1:741){if (i %% 10 == 0) {block_maxima <- c(block_maxima, max(log_returns[i-9: i]))
}}

这段代码给了我结果:

c(0, 0.0287804332171326, 0.0287804332171326, ...)

而且我要:

c(0.0287804332171326, 0.0236378411885054, 0.0185381209989108, ...)

有人可以指出我在代码中犯的错误吗?提前致谢。

标签: rfor-loopif-statement

解决方案


我们可以将i-9内部包裹起来()以避免运算符优先级的问题

block_maxima = c()
for (i in 1:741){
        if (i %% 10 == 0) {
     block_maxima <- c(block_maxima, max(log_returns[(i-9): i]))
   }
   }

推荐阅读