2013-01-09 18 views
2

大的矢量條件I具有大小爲5例如一個矢量:應用 '>' 中,如果用比長度1中的R

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

我也有尺寸1的另一向量:

b<-9 

我想編寫以下if條件:

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'中的任何元素是否滿足條件。

回答

4

使用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

只需使用簡單的比較:

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 
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 ] 

如果你想要選擇哪兩個e從其他2個載體中選擇以「並行」方式選擇,基於逐元素決定,然後使用ifelse而不是if(){ }else{ }

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