Вложенные для циклов в R таким образом, что индекс 2-го = индекс 1-го 1

#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] .