3

サイズ5のベクトルがあります。例:

 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

3 に答える 3

6

使用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値と等しい場合はaaより大きくなければなりません。

于 2013-01-09T10:30:58.287 に答える
3

単純な比較を使用してください。

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
于 2013-01-09T10:29:54.777 に答える
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 ]

また、要素ごとの決定に基づいて、他の2つのベクトルから2つの要素のどちらを「並列」に選択するかを選択する場合は、ifelseではなくを使用します。if (){ }else{ }

ifelse( a>b, 1:5, seq(2,10, by=2) )
# returns 2 4 6 8 10
于 2013-01-09T11:16:28.870 に答える