我有两个向量,一个来自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)
答案 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.equal
与check.attributes=FALSE
all.equal(unique, query, check.attributes=FALSE)
#[1] TRUE
或者将dimnames
的'query'中的属性设置为NULL,然后使用identical
attr(query, "dimnames") <- NULL
identical(query, unique)
#[1] TRUE