0

今日、データフレームのサブセット操作によるコードのバグに直面しました。私が見つけた問題がバグなのか、それとも R のセマンティクスに違反しているのかを知りたいです。

R 2.15.2-61015 (Trick or Treat) で RHEL x86_64 を実行しています。基本パッケージのサブセット操作を使用しています。

次のコードは再現可能である必要があり、このテストの目的で開始されたクリーンな R コンソールで実行されました。

>teste <-data.frame(teste0=c(1,2,3),teste1=c(3,4,5))
>teste0<-1
>teste1<-1

>subset(teste,teste[,"teste0"]==1 & teste[,"teste1"]==1)
[1] teste0 teste1
<0 rows> (or 0-length row.names)

>subset(teste,teste[,"teste0"]==teste0 & teste[,"teste1"]==teste1)
teste0 teste1
1      1      3
2      2      4
3      3      5

ただし、サブセット操作の外で論理コードを実行すると、次のようになります。

>teste[,"teste0"]==teste0 & teste[,"teste1"]==teste1
[1] FALSE FALSE FALSE

両方のサブセット操作で空のデータフレームが生成されると予想されます。ただし、2 番目のものは完全なデータフレームを返します。これはバグですか、それとも R 環境と名前空間について何か不足していますか?

助けてくれてありがとう、ミゲル

4

1 に答える 1

5

この声明では:

subset(teste,teste[,"teste0"]==teste0 & teste[,"teste1"]==teste1)

teste0 は teste$teste0 を意味します。teste1 も同様です。

この声明では:

teste[,"teste0"]==teste0 & teste[,"teste1"]==teste1

teste0 と teste1 は、上で定義したベクトルです (データ フレームのメンバーではありません)。

于 2012-11-21T19:27:23.423 に答える