我有一个大小为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'中的任何元素是否满足条件。
答案 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 {
}
这就是说,如果(a
,b
)的最大值中的任何一个等于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