R: цикл упражнений без NA на выходе - PullRequest
0 голосов
/ 15 марта 2019

Я практикую простой цикл RИз вектора "m" со значениями от 1 до 20 я хочу создать цикл, который сохраняет выбранное значение в объекте "a" и оставшиеся значения в объекте "b".

Это то, что я сделал:

a=NULL
b=NULL

m <- c(1:20)

for (i in m) 
     if (i == 4){
      a[[i]] <- i
     } else {
      b[[i]] <- i
     }

Это вывод:

> a
[1] NA NA NA  4

>  b
[1]  1  2  3 NA  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

Мой вопрос: как я могу улучшить мой код цикла, чтобы на выходе не отображались NA, и без использования функции "na.опустить "?

Спасибо

Ответы [ 2 ]

2 голосов
/ 15 марта 2019
a=NULL
b=NULL

m <- c(1:20)

for (i in m){
  if (i == 4){
    a <- i
  } else {
    b <- append(b, i)
  }
}

Это поместит одно значение (в данном случае 4) в объект a и последовательно добавит другие значения к b.

Результат:

> a
[1] 4
> b
 [1]  1  2  3  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
1 голос
/ 15 марта 2019

Другой способ решить эту проблему - с помощью векторных операций Нам не нужно делать цикл, чтобы решить некоторые проблемы с классификацией.

В вашем случае мы можем использовать:

    m = c(1:20)
    subset_with = m[m == 4] # It returns the values with the maching (m == 4)
    subset_without = m[m != 4] # It returns the values with the maching (m != 4)

Надеюсь, это поможет вам.

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