2016-04-02 5 views
1

私はsqldf()とunique()の2つのベクトルを持っています。それらは同一でなければなりません。 forループを使って各要素を検査すると、2つのベクトルは同じですが、2つのベクトルのsame()は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

理由は、「ユニークな」中には見ら​​れない「QUERY」でdimnamesの属性があるということです。 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" 

一つの選択肢はcheck.attributes=FALSE

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

またはNULL、その後identicalを使用するdimnamesのための「QUERY」の属性を設定してall.equalを用いることであろうでなければなりません

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

ありがとう、それは私の問題を解決しました! –

関連する問題