индекс элемента вектора в цикле - R - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть вектор чисел, и мне нужно найти индекс первого числа, которое больше 24 и делится на 13, если ни одно число не отвечает условиям, выведите 0. Это код, который я написал:

numbers_vector=c(1,5,26,7,94)
for(i in numbers_vector){
  if(i>24&&i%%13==0){
    print(i)
  }else{
    print(0)
  }
}

ответ, который он возвращает:

[1] 0
[1] 0
[1] 26
[1] 0
[1] 0

он должен возвращать число 3 (индекс), поскольку 26 отвечает условиям.

Может кто-нибудь увидеть, что я делаю неправильно?Спасибо

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018
which.max(numbers_vector>24 & numbers_vector%%13==0)

Это даст вам результат, который вы ищете, но если ни одно из чисел не подходит, он возвращает NA.Если вы хотите получить ноль в таких случаях, сделайте следующее:

a=which.max(numbers_vector>24 & numbers_vector%%13==0)
ifelse(is.na(a), 0, a)

Два общих комментария: a.Избегайте автоматического перехода на цикл.Наибольшая сила R в векторизованных вычислениях.Б. Старайтесь не использовать печать, чтобы вернуть свой результат.

0 голосов
/ 16 декабря 2018

Требуется только небольшое изменение:

numbers_vector=c(1,5,26,7,94)
for(i in numbers_vector){
  if(i>24 && i%%13==0){
    print(which(numbers_vector == i))
  }else{
    print(0)
  }

}

Вы печатаете i, то есть само число, а не его индекс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...