所有元素都相同,但不是相同的向量?

时间:2016-04-02 04:24:08

标签: r sqldf

我有两个向量,一个来自sqldf(),另一个来自unique()。它们应该完全相同。当我使用for循环检查每个元素时,两个向量是相同的,但两个向量上的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 个答案:

答案 0 :(得分:1)

原因是“查询”中存在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"

一种选择是将all.equalcheck.attributes=FALSE

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

或者将dimnames的'query'中的属性设置为NULL,然后使用identical

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