2016-04-02 15 views
1

İki vektörüm var, biri sqldf() ve diğeri ise benzersiz(). Aynı olmalılar. Her öğeyi denetlemek için bir for döngüsü kullandığımda, iki vektör aynıdır, ancak iki vektör üzerindeki aynı() FALSE değerini döndürür. Herhangi bir fikir?Tüm öğeler için aynıdır, ancak aynı vektörler için değil?

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) 

cevap

1

nedeni 'benzersiz' bulunmaz 'sorguda' in dimnames için nitelikler olmasıdır. identicalTRUE dönmek için her şey aynı

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" 

Seçeneklerden biri identical kullanmak sonra check.attributes=FALSE

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

ile all.equal kullanmak Veya NULL dimnames için 'sorgusu' in özelliklerini ayarlayabilir ve olacaktır olmalıdır

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

Teşekkür ederim, sorunumu çözdü! –

İlgili konular