#r #for-loop #nested-loops
Вопрос:
Я пытаюсь написать вложенные циклы for (i индексирует 1-й цикл, j индексирует 2-й цикл) таким образом, чтобы j начинался с i 1 и заканчивался определенным значением (последним значением вектора). В частности:
vettore = 1 : 10
for (i in vettore) {
j = i 1
for (j in vettore) {
cat("i: ", i)
cat("j: ", j, "n")
}
}
Мне нужно следующее поведение.
Итерация 1 1-го цикла: i = 1, j = 2 до j = 10
Итерация 2 1-го цикла: i = 2, j = 3 до j = 10
и так далее. Как я могу это сделать?
Ответ №1:
Второй цикл должен начинаться с j
, но в вашем коде он все еще выполняется для каждого значения vettore
. Также его лучше использовать seq_along
или 1:length(vettore)
вместо for (i in vettore)
.
Вот способ это исправить.
vettore = 1 : 10
for (i in seq_along(vettore)) {
j = i 1
for (k in j:length(vettore)) {
cat("i: ", i)
cat("tj: ", k, "n")
}
}
#i: 1 j: 2
#i: 1 j: 3
#i: 1 j: 4
#i: 1 j: 5
#i: 1 j: 6
#i: 1 j: 7
#i: 1 j: 8
#i: 1 j: 9
#i: 1 j: 10
#i: 2 j: 3
#i: 2 j: 4
#i: 2 j: 5
#...
#...
Комментарии:
1. Здравствуйте @RonakShah большое вам спасибо за ваш интересный ответ. Вы использовали seq_along, потому что хотите быть уверенным, что значения i являются последовательностью 1 2 3 4?
2.Это правильно. Так что если
vettore
измененияvettore = 11 : 20
seq_along
все равно дадут 1, 2, 3…. Если вы хотите использовать определенное значение в цикле, вы можете это сделатьvettore[i]
.