2016-03-15 25 views
1

下面是一個Hadley Wickham's Advanced R例如產生data.frame,有一個列,它是列表:平等其中一列就是一個列表

df1 <- data.frame(x=1:3) 
df1$y <- list(1:2,1:3,1:4) 

他接着解釋說,這也有可能創建data.frame作爲

df2 <- data.frame(x=1:3,y=I(list(1:2,1:3,1:4))) 

兩個返回

x   y 
1 1  1, 2 
2 2 1, 2, 3 
3 3 1, 2, 3, 4 

我的問題:我可以檢查df1df2是否「相同」,如果是這樣,怎麼辦?

我試過all.equal(df1,df2),這給了(對不起,在德國的安裝工作)

[1] "Component 「y」: Attributes: < Ziel ist NULL, aktuell ist list >" 

identical(df1,df2)這給

[1] FALSE 

以及all(df1==df2),它返回

Error in FUN(left, right) : comparison of these types is not implemented 
+2

什麼'all.equal(DF1,DF2,check.attributes = FALSE)'? – nrussell

+0

是的,非常感謝! –

+0

你願意教育我爲什麼這是題外話?我承認不瞭解「具體原因」。 –

回答

1

他們是不一樣的,這是wha牛逼identical()是檢查,他們有不同的類別...

str(df1) 
'data.frame': 3 obs. of 2 variables: 
$ x: int 1 2 3 
$ y:List of 3 
    ..$ : int 1 2 
    ..$ : int 1 2 3 
    ..$ : int 1 2 3 4 
str(df2) 
'data.frame': 3 obs. of 2 variables: 
$ x: int 1 2 3 
$ y:List of 3 
    ..$ : int 1 2 
    ..$ : int 1 2 3 
    ..$ : int 1 2 3 4 
    ..- attr(*, "class")= chr "AsIs" 

與此類似:

> a <- 1:3 
> b <- 1:3 
> class(b) <- "aaa" 
> a 
[1] 1 2 3 
> b 
[1] 1 2 3 
attr(,"class") 
[1] "aaa" 
> identical(a,b) 
[1] FALSE 
> a==b 
[1] TRUE TRUE TRUE 
相關問題