#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