2016-04-02 89 views
1

我有兩個向量,一個來自sqldf(),另一個來自unique()。它們應該是相同的。當我使用for循環來檢查每個元素時,這兩個向量是相同的,但兩個向量的相同()返回FALSE。有任何想法嗎?所有元素都相同,但不完全相同?

options(sqldf.driver = "SQLite") 
options(gsubfn.engine = "R") 
library(sqldf) 
url <-"https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06pid.csv" 
download.file(url, destfile = "CommunitySurvey.csv") 
acs <- read.table("CommunitySurvey.csv", sep = ",", header = TRUE) 
query <- as.matrix(sqldf("select distinct AGEP from acs")) 
unique <- as.matrix(unique(acs$AGEP)) 

for (i in 1:dim(unique)[1]){ 
    if (unique[i]!=query[i]){ 
    print(unique[i]) 
    print(query[i]) 
    } 
} 


identical(query, unique) 

回答

1

原因是在「查詢」中存在dimnames的屬性,而在'unique'中找不到該屬性。對於identical返回TRUE,一切都應該是一樣的

str(unique) 
#int [1:91, 1] 43 42 16 14 29 40 15 28 30 4 ... 
str(query) 
# int [1:91, 1] 43 42 16 14 29 40 15 28 30 4 ... 
# - attr(*, "dimnames")=List of 2 
# ..$ : NULL 
# ..$ : chr "AGEP" 

一種選擇是使用all.equalcheck.attributes=FALSE

all.equal(unique, query, check.attributes=FALSE) 
#[1] TRUE 

或爲dimnames設置「查詢」的屬性爲NULL,然後用identical

attr(query, "dimnames") <- NULL 
identical(query, unique) 
#[1] TRUE 
+1

謝謝,它解決了我的問題! –

相關問題