【发布时间】: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 我想就是这样!没想到操作顺序是这样的。