Одинаковые для всех элементов, но не одинаковые векторы?

У меня есть два вектора, один из 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)

person green_C    schedule 02.04.2016    source источник


Ответы (1)


Причина в том, что в 'query' есть атрибуты для 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.equal с check.attributes=FALSE

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

Или установите атрибуты в «запросе» для dimnames на NULL, а затем используйте identical

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