2012-11-21 51 views
0

今天,由於數據框子集操作,我在我的代碼中遇到了一個錯誤。我想知道我發現的問題是一個錯誤還是我違反了R語義。CRAN-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 

我希望這兩個子集的操作會產生一個空的數據幀。但是,第二個返回完整的數據幀。這是一個錯誤還是我錯過了有關R環境和命名空間的東西?

感謝你的幫助, 米格爾

+3

這絕對不是一個錯誤。 – Andrie

回答

5

在此聲明:

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

teste0意味着阿泰斯特$ teste0。與teste1相同。

在此語句:

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

teste0和teste1是您已上述(數據幀的未成員)所定義的載體。

+0

@Mathew謝謝!你能告訴我一個詳細的資料來源嗎? – mmgm

+0

查看幫助(子集),尤其是示例。 –

+0

@Mathew,這讓我感到很蠢......基本上我定義的向量在子集函數中改變了它們的本質。我想知道的是在R時什麼時候會發生這種情況。不僅在這種情況下。因爲我收集這是相當普遍的事情?再次感謝。 – mmgm