2016-05-30 4 views
1

私はRでIFステートメントの構文を知っている:なぜ `intersect`構文が` if文 `でRで動作しないのですか?

if (1==1){ 
    print("this is true") 
} 

そして私は()間のものは論理的に評価されるべきであることを知っています。だから、私はこのしようとすると:

intersect(list(1),list(1,2)) == list() 

私は明らかに間違って何かをやっている?

if (intersect(list(1),list(1,2)) != list()){ 
    print("this is also true") 
} 

intersect(list(1),list(1,2)) != list()は論理型として評価されているので、私は、それが動作するように期待ありがとう。

+1

論理ベクトルの長さは1でなければなりません。 'length(intersect(list(1)、list(1,2)))> 0'をテストできます。 – Roland

+0

論理*タイプ*、はい、長さはゼロです。その式は 'TRUE'か' FALSE'のいずれかに評価されなければなりません。 –

+1

交差点の長さが0である場合(長さ(intersect(list(1)、list(1,2))== 0'のように)この場合は尋ねませんか?リストを比較すると、 'list(1,2)== list(1,2)'のようにサポートされているようには見えません。 'List(1,2)== list(1,2)のエラーです。 これらのタイプの比較は実装されていません。 – steveb

答えて

2

論理演算子は、リストオブジェクトの比較には適切ではありません。リストオブジェクトは再帰的な型であり、構造情報を失うことなく論理ベクトルに強要されません。リストを比較する機能はidenticalです。 list(1)list(1,2)の交点がlist()ではないので、あなたの操作がTRUE提供することを期待するのは妥当いないようでしたので、私はテストを可能にするためにテストを反転:

if (!identical(intersect(list(1),list(1,2)), list())) { 
      print("this is also true") 
     } 
#[1] "this is also true" 

交差点はlist(1)です:

if (identical(intersect(list(1),list(1,2)), list(1))) { 
    print("this is also true") 
} 
#[1] "this is also true" 
関連する問題