R:循环练习,输出无NA

时间:2019-03-15 12:07:04

标签: r

我正在练习一个简单的R循环。我要从值1到20的向量“ m”创建一个循环,将选定值保存在对象“ 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.omit”?

谢谢

2 个答案:

答案 0 :(得分:2)

a=NULL
b=NULL

m <- c(1:20)

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

这将在对象a中放置一个值(在本例中为4),并将其他值连续添加到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 :(得分:1)

另一种解决方法是向量运算。我们不需要做循环来解决有关分类的一些问题。

在您的情况下,我们可以使用:

    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)

希望对您有帮助。