0

私は R で作業しており、奇妙な動作を発見しました。私はそれを回避できますが、奇妙に思えるので、次の出力が得られる理由を誰かが説明できるかどうか疑問に思っていました:

> xlabs <- 1:367
> i <- c(2:5)
> Date[xlabs == i]
character(0)
Warning message:
In xlabs == i :
  longer object length is not a multiple of shorter object length
> Date[xlabs = i]
[1] "2011-07-19" "2011-07-20" "2011-07-21" "2011-07-22"

この場合、論理的等号が適用されない理由がわかりませんが、単純な等号は適用されます。Rで特定の分析プロセスを実行する方法についての簡単なマニュアルを書いていますが、読者のために「理由」の説明を使用する必要はありません。

4

1 に答える 1

4

必要な演算子は次の%in%とおりです。

Date[xlabs %in% i]

あなた=が思っていることをしていません。例の最後の行のxlabs 後を見てください。あなたがしたかのように設定xlabsしているのは、ほとんどの代わりです。ixlabs <- i=<-

比較を行う方法が原因で==機能しません。検討:

> 1:10 == 5:7
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Warning message:
In 1:10 == 5:7 :
  longer object length is not a multiple of shorter object length

それはやっています:

> 1 == 5
[1] FALSE
> 2 == 6
[1] FALSE
> 3 == 7
[1] FALSE
> 4 == 5
[1] FALSE
> 5 == 6
[1] FALSE
> 6 == 7
[1] FALSE
> 7 == 5
[1] FALSE
> 8 == 6
[1] FALSE
> 9 == 7
[1] FALSE
> 10 == 5
[1] FALSE

R は、長いベクトルの長さに一致するように繰り返すことで、短いベクトルをリサイクルします。length(xlabs)警告が表示されるのは正確な倍数ではありませんがlength(i)、何も選択していないのは比較自体です

> 1[FALSE]
numeric(0)

したがって、空のベクトル (この場合は空の文字ベクトル) です。

于 2012-07-30T20:16:02.543 に答える