应用'>'在条件中,向量大于R中的长度1

时间:2013-01-09 10:26:32

标签: r

我有一个大小为5的向量,例如:

 a<-c(1,4,6,3,2)

我还有另一个大小为1的向量:

 b<-9

如果条件:

,我想写下列内容
if (a>b) { 1
}
else 0
}

我收到以下警告:

 Warning message:
In if (fitness_neighbours > user_fitness) { :
  the condition has length > 1 and only the first element will be used

我真正希望它做的是检查'a'中的任何元素是否满足条件。

3 个答案:

答案 0 :(得分:5)

使用any()和比较:

if(any(a > b)) {
  # Executes if any value in a > b.
} else {
  # No a is greater than b.
} 

使用pmax()执行此操作的另一种方法:

if (any(pmax(a, b) == a)) {

} else {

} 

这就是说,如果(ab)的最大值中的任何一个等于a中的值,那么a必须更大。

答案 1 :(得分:2)

只需使用简单的比较:

a <- c(1,4,6,3,20)
b <- 9
a > b

[1] FALSE FALSE FALSE FALSE  TRUE

这很有效,因为R基本上是一种基于矢量的语言。

您可以轻松地将逻辑结果转换为数字:

as.numeric(a > b)
[1] 0 0 0 0 1

答案 2 :(得分:0)

如果问题是任何值是否满足条件:

any(a>b)  # no need for `if`

如果需要为1/0,那么其中任何一个都可以工作:

as.numeric( any(a>b) )
c(0,1)[1+any(a>b)] # because indexing has origin at 1 rather than 0-based indexing

如果目标是选择满足哪些,请使用逻辑索引

a[ a>b ]

如果你想在两个其他向量中选择两个元素中的哪一个以“并行”方式选择,基于逐个元素决策,那么使用ifelse而不是if (){ }else{ } < / p>

ifelse( a>b, 1:5, seq(2,10, by=2) )
# returns 2 4 6 8 10