我正在练习一个简单的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”?
谢谢
答案 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)
希望对您有帮助。