【问题标题】:For-loop index iteration over date vector日期向量上的 for 循环索引迭代
【发布时间】:2022-01-28 18:32:28
【问题描述】:

我知道这可能是一个愚蠢的问题,但为什么我需要从 2 而不是 1 开始才能让这个列表正确循环?

date <- seq(as.Date("2021-01-01"), as.Date("2021-12-31"), by="months")
num <- length(date)

for(i in 2:num-1){
    print(paste0("i = ",i))      
  j = i+1
 sd <- date[i]
 ed <- date[i+1]
    print(paste0("start: ",sd))
    print(paste0("end: ",ed))
    }

输出:

[1] "i = 1"

[1]“开始:2021-05-01”

[1]“结束:2021-06-01”

[1] "i = 2"

[1]“开始:2021-06-01”

[1]“结束:2021-07-01”

[1] "i = 3"

[1]“开始:2021-07-01”

[1]“结束:2021-08-01”

[1] "i = 4"

[1]“开始:2021-08-01”

[1]“结束:2021-09-01”

[1] "i = 5"

[1]“开始:2021-09-01”

[1]“结束:2021-10-01”

但是当我开始时:for(i in 1:num-1)

没有正确找到第一个索引项:

[1] "i = 0"

[1] “开始:”

[1]“结束:2021-05-01”

[1] "i = 1"

[1]“开始:2021-05-01”

[1]“结束:2021-06-01”

[1] "i = 2"

[1]“开始:2021-06-01”

[1]“结束:2021-07-01”

[1] "i = 3"

[1]“开始:2021-07-01”

[1]“结束:2021-08-01”

[1] "i = 4"

[1]“开始:2021-08-01”

[1]“结束:2021-09-01”

[1] "i = 5"

[1]“开始:2021-09-01”

[1]“结束:2021-10-01”

【问题讨论】:

  • 试试这个1:(num-1)
  • 好吧,你还没有描述循环的“正确”执行可能是什么,但我认为将你所拥有的结果与将循环定义为 @ 时的结果进行比较会很有帮助987654324@。线索:运算符优先级。
  • R Inferno 第 8.1.3 节:burns-stat.com/pages/Tutor/R_inferno.pdf
  • @AndreWildberg 我想就是这样!没想到操作顺序是这样的。

标签: r loops date indexing


【解决方案1】:

好的,感谢 cmets 中的 Andre Wildberg,我没有意识到柜台内有隐含的操作顺序。所以这就是有效的方法,使用括号来明确所需的操作顺序:

1:(num-1)

而不是

1:num-1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2020-09-20
    • 2019-09-10
    相关资源
    最近更新 更多