2013-12-13 5 views
4

У меня есть два data.frames, которые I ожидают, что будет одинаковым, но идентичный() возвращает false.Определить причину `identity()` return FALSE

В качестве фона, один DF происходит от ARFF файла данных Iris, в то время как друг .rdata файла, если это меняет что-нибудь

Всех элементов х == у истинны, класс те же для обеих переменных имена розеток одинаковы для обоих, также как и имена кодов.

Как определить, что вызвало выход FALSE?

EDIT: выход all.equal, как указано ниже

[1] "Component 1: Attributes: < Modes: list, NULL >"         
[2] "Component 1: Attributes: < names for target but not for current >"    
[3] "Component 1: Attributes: < Length mismatch: comparison on first 0 components >" 

EDIT: выход атрибутов как

> attributes(dataset) 
$names 
[1] "Class"  "petal-length" "petal-width" "sepal-length" "sepal-width" 
$row.names 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 
[33] 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 
[65] 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 
[97] 97 98 99 100 
$class 
[1] "data.frame" 

> attributes(dataset2) 
$names 
[1] "Class"  "petal-length" "petal-width" "sepal-length" "sepal-width" 
$row.names 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 
[33] 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 
[65] 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 
[97] 97 98 99 100 
$class  
[1] "data.frame" 
` 

выход из ул (х):

> str(dataset) 
'data.frame': 100 obs. of 5 variables: 
$ Class  : atomic 1 0 1 0 1 0 0 0 1 1 ... 
..- attr(*, "feature.type")= chr "Numeric" 
$ petal-length: atomic 6.3 4.8 7.2 5.2 6.7 4.9 5.5 5.3 6.4 6.1 ... 
..- attr(*, "feature.type")= chr "Numeric" 
$ petal-width : atomic 2.9 3.4 3.2 3.4 3.1 3.6 3.5 3.7 3.1 2.6 ... 
..- attr(*, "feature.type")= chr "Numeric" 
$ sepal-length: atomic 5.6 1.6 6 1.4 5.6 1.4 1.3 1.5 5.5 5.6 ... 
..- attr(*, "feature.type")= chr "Numeric" 
$ sepal-width : atomic 1.8 0.2 1.8 0.2 2.4 0.1 0.2 0.2 1.8 1.4 ... 
..- attr(*, "feature.type")= chr "Numeric" 
> str(dataset2) 
'data.frame': 100 obs. of 5 variables: 
$ Class  : num 1 0 1 0 1 0 0 0 1 1 ... 
$ petal-length: num 6.3 4.8 7.2 5.2 6.7 4.9 5.5 5.3 6.4 6.1 ... 
$ petal-width : num 2.9 3.4 3.2 3.4 3.1 3.6 3.5 3.7 3.1 2.6 ... 
$ sepal-length: num 5.6 1.6 6 1.4 5.6 1.4 1.3 1.5 5.5 5.6 ... 
$ sepal-width : num 1.8 0.2 1.8 0.2 2.4 0.1 0.2 0.2 1.8 1.4 ... 
> 

ответ

2

Try что-то вроде:

all.equal(x,y) 

В противном случае посмотрите на library(compare).

+0

интересно, я уже отправил вывод команды в моем редактирования, вы бы все равно, чтобы объяснить, что может быть причиной этого? –

+0

Похоже, что они идентичны по содержанию, но отличаются по некоторым атрибутам. Попробуйте искать атрибуты (x) 'и' attributes (y) '. – Thomas

+0

Я на самом деле пробовал это раньше, и они кажутся точно такими же (вывешены выходы выше). любые другие подсказки? Спасибо большое за помощь до сих пор –

1

Если вы хотите знать, тот, который отличается, вы можете использовать

which(x != y, arr.ind=TRUE) 
+0

спасибо, выход просто говорит 'row col'. Означает ли это, что нет числовых различий? –

+0

Да, он перечислит все строки и столбцы, которые отличаются. Если нет различий, там не будет строк и столбцов. – josliber