[R] "strange" behaviour: recognition of decimal numbers by 'which'
Erik Iverson
eriki at ccbr.umn.edu
Tue Feb 2 15:54:29 CET 2010
FAQ 7.31
J.delasHeras at ed.ac.uk wrote:
>
> It is a strange behaviour in that I did not expect it... but I am sure
> there is a simple explanation for it and it'll have to do with the way
> numbers are stored in R, but it's caught me by surprise and I don't find
> it obvious.
>
> Here's a simplified example reproducing the behaviour I encountered:
>
> I create an empty vector, and I fill it with a sequence of numbers: 0,
> 0.005, 0.01, 0.015, 0.02, etc... until 0.1.
> (In my real code this is just a way to store certain values when certain
> conditions are met etc etc)
> Then I ask which element contains teh value 0.01. Ok. Same with 0.02.
> But when I ask about 0.03 or above... the answer is none. But I can see
> "0.03" in my vector, it is there!
>
> This must be because of the value stored internally. Indeed, if I do:
>
> v-0.03, when I reach the value that appeared to contain 0.03, I don't
> obtain zero, but "3.47e-18"
>
> why is this?
> what is the recommended way to overcome this?
> Interestingly, if I store the values as "character", then I can match
> them fine...
>
> Below is the code, and my sessionInfo() output.
>
> Thanks!
>
> Jose de las Heras
>
>
> code example:
> #v<-vector(mode="character")
> v<-c()
> i<-0
> while (i <= 0.1)
> {
> v<-c(v,i)
> i<-i+0.005
> }
> v
> which(v==0.01)
> which(v==0.02)
> which(v==0.03)
>
>
>
>> sessionInfo()
> R version 2.10.0 (2009-10-26)
> i386-pc-mingw32
>
> locale:
> [1] LC_COLLATE=English_United Kingdom.1252
> [2] LC_CTYPE=English_United Kingdom.1252
> [3] LC_MONETARY=English_United Kingdom.1252
> [4] LC_NUMERIC=C
> [5] LC_TIME=English_United Kingdom.1252
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
> other attached packages:
> [1] biomaRt_2.2.0
>
> loaded via a namespace (and not attached):
> [1] RCurl_1.3-1 tools_2.10.0 XML_2.6-0
>
>
>
More information about the R-help
mailing list