Hello,

But

> all.equal(dat1,dat2)
[1] TRUE

So I guess it does have to do with floating-point equality, all.equal uses .Machine$double.eps. (Which could return FALSE on ocasions we would expect TRUE, when, for instance, the tolerance could/should be .Machine$double.eps^0.5.)

Rui Barradas

Em 01-07-2012 18:55, arun escreveu:
HI R help,

I was trying to get identical data frame from a list using two methods.

#Suppose my list is:
listdat1<-list(rnorm(10,20),rep(LETTERS[1:2],5),rep(1:5,2))
#Creating dataframe using cbind

dat1<-data.frame(do.call("cbind",listdat1))
colnames(dat1)<-c("Var1","Var2","Var3")
#Second dataframe conversion

dat2<-data.frame(Var1=listdat1[[1]],Var2=listdat1[[2]],Var3=listdat1[[3]])

#Structure is different in two datasets
  >str(dat1)
'data.frame':    10 obs. of  3 variables:
  $ Var1: Factor w/ 10 levels "18.6153321029756",..: 5 2 6 8 7 9 1 4 3 10
  $ Var2: Factor w/ 2 levels "A","B": 1 2 1 2 1 2 1 2 1 2
  $ Var3: Factor w/ 5 levels "1","2","3","4",..: 1 2 3 4 5 1 2 3 4 5
str(dat2)
'data.frame':    10 obs. of  3 variables:
  $ Var1: num  20.3 19.2 20.5 20.9 20.5 ...
  $ Var2: Factor w/ 2 levels "A","B": 1 2 1 2 1 2 1 2 1 2
  $ Var3: int  1 2 3 4 5 1 2 3 4 5

#Converting structure of dat1 to match da2 structure
dat1<-within(dat1,{Var1<-as.numeric(as.character(Var1))
     Var3<-as.integer(Var3)})

head(dat1)
       Var1 Var2 Var3
1 20.27193    A    1
2 19.17586    B    2
3 20.53197    A    3
4 20.93615    B    4
5 20.53498    A    5
6 21.02044    B    1
head(dat2)
       Var1 Var2 Var3
1 20.27193    A    1
2 19.17586    B    2
3 20.53197    A    3
4 20.93615    B    4
5 20.53498    A    5
6 21.02044    B    1


#New structure identical(str(dat1),str(dat2))
'data.frame':    10 obs. of  3 variables:
  $ Var1: num  19.9 19 21.2 20.7 20.4 ...
  $ Var2: Factor w/ 2 levels "A","B": 1 2 1 2 1 2 1 2 1 2
  $ Var3: int  1 2 3 4 5 1 2 3 4 5
'data.frame':    10 obs. of  3 variables:
  $ Var1: num  19.9 19 21.2 20.7 20.4 ...
  $ Var2: Factor w/ 2 levels "A","B": 1 2 1 2 1 2 1 2 1 2
  $ Var3: int  1 2 3 4 5 1 2 3 4 5
[1] TRUE



#structure is identical and dataframe looks to be same, but it is not identical.
identical(dat1,dat2)
[1] FALSE


Is it something to do with the floating point?

Thanks,

A.K.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to