R: цикл For работает только при выполнении вручную

#r #loops

#r #циклы

Вопрос:

итак, у меня есть фрейм данных с четырьмя числовыми столбцами A, B, C и D

Теперь я написал цикл for для изменения значений строка за строкой при выполнении определенных условий.

но ничего не происходит! Если я вручную установлю k = 1, k = 2, k = 3 и вручную запущу две функции if в цикле, это сработает! Мне это кажется ошибкой?

 for (k in nrow(list)) {

if(list$A[k]>list$C[k]) {list$C[k]=list$A[k]}
  
if(list$B[k]<list$D[k]) {list$D[k]=list$B[k]}

}

list
  

Пример:

 A          B           C          D
195679832  197768053   195000001  197500000
195679832  197768053   197500001  200000000
227573015  228592110   227500001  230000000
64199445   65230121    65000001   67500000
  

должно стать

 
A          B           C           D
195679832  197768053   195679832  197500000
195679832  197768053   197500001  197768053
227573015  228592110   227573015  228592110
64199445   65230121    64199445   65000000
64199445   65230121    65000001   65230121
  

опять же: когда я вручную увеличиваю k и запускаю содержимое цикла один за другим, он работает просто отлично, но если я запускаю цикл в целом, он больше не будет выполнять предложения if. Он также не выдает сообщения об ошибке.

Комментарии:

1. Так и должно быть for (k in seq_len(nrow(list))) . Предположим, что ваш list действительно является фреймом данных.

Ответ №1:

Вы забыли 1: предыдущее nrow(list) . k получал только 4, а не 1: 4.

 for (k in 1:nrow(list)) {

if(list$A[k]>list$C[k]) {list$C[k]=list$A[k]}
  
if(list$B[k]<list$D[k]) {list$D[k]=list$B[k]}

}

list