Benjamin Otto
2007-Feb-08 10:29 UTC
[R] Diffrerence in "%in%" function to boundry setting via <>
Hi, There is a point which is irritating me currently quite a bit and that is an aspect of different behaviour between the %in% function and the smaller/bigger than signs (<>). Here is are two examples to demonstrate what I mean: Example1:> c(1,1,2,2,3,4,4,6,7) %in% c(1,2,3)[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE Right, that is what I expect. Example2:> ps <- seq(-0.502,0.378,by=0.001) > ps[494][1] -0.009> class(ps[494])[1] "numeric"> class(-0.009)[1] "numeric"> class(ps[494])[1] "numeric"> ps[494] == -0.009[1] FALSE> ps[494] %in% -0.009[1] FALSE> ps[494] == c(-0.009)[1] FALSE> ps[494] %in% c(-0.009)[1] FALSE> ps[494] <= -0.008[1] TRUE> ps[494] >= -0.010[1] TRUE> -0.009 == -0.009[1] TRUE BUT:> ps[249][1] -0.254> class(ps[249])[1] "numeric"> ps[249] %in% -0.254[1] TRUE OK! Can sombody explain to me what is happening here? Honestly? I don't understand where the difference but it's critical! Because obviuosly when I have a set of numeric values (ALL have three digits) and to boundry values lb/up, a lower and an upper boundry, I could (from what I thought until now) chosse between: Version1:> small.set <- set[set %in% seq(lb,up,by=0.001)]Version2:> small.set <- set[set >= lb & set <= up]Unfortunately with my data I used I got around 8000 values from my set with version1 but about 24000 with version2. IS there some main diffrence I didn't take into account or is my system just behaving irrational (that's what I think if you look at Example2)? I checked the behaviour under R-2.4.1 (Windows) and under 2.2.1 (Linux). The result was the same. Sincere regards Benjamin Otto -- Benjamin Otto Universitaetsklinikum Eppendorf Hamburg Institut fuer Klinische Chemie Martinistrasse 52 20246 Hamburg
Roger Bivand
2007-Feb-08 10:51 UTC
[R] Diffrerence in "%in%" function to boundry setting via <>
On Thu, 8 Feb 2007, Benjamin Otto wrote: A version of FAQ 7.31 "Why doesn't R think these numbers are equal?" http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f> ps <- seq(-0.502,0.378,by=0.001) > ps[494][1] -0.009> print(ps[494], digits=16)[1] -0.009000000000000008> all.equal(ps[494], -0.009)[1] TRUE> Hi, > > There is a point which is irritating me currently quite a bit and that is an > aspect of different behaviour between the %in% function and the > smaller/bigger than signs (<>). Here is are two examples to demonstrate what > I mean: > > Example1: > > c(1,1,2,2,3,4,4,6,7) %in% c(1,2,3) > [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE > > Right, that is what I expect. > > Example2: > > ps <- seq(-0.502,0.378,by=0.001) > > ps[494] > [1] -0.009 > > > class(ps[494]) > [1] "numeric" > > class(-0.009) > [1] "numeric" > > class(ps[494]) > [1] "numeric" > > > ps[494] == -0.009 > [1] FALSE > > ps[494] %in% -0.009 > [1] FALSE > > ps[494] == c(-0.009) > [1] FALSE > > ps[494] %in% c(-0.009) > [1] FALSE > > ps[494] <= -0.008 > [1] TRUE > > ps[494] >= -0.010 > [1] TRUE > > -0.009 == -0.009 > [1] TRUE > > BUT: > > ps[249] > [1] -0.254 > > class(ps[249]) > [1] "numeric" > > ps[249] %in% -0.254 > [1] TRUE > > OK! Can sombody explain to me what is happening here? Honestly? I don't > understand where the difference but it's critical! Because obviuosly when I > have a set of numeric values (ALL have three digits) and to boundry values > lb/up, a lower and an upper boundry, I could (from what I thought until now) > chosse between: > > Version1: > > small.set <- set[set %in% seq(lb,up,by=0.001)] > > Version2: > > small.set <- set[set >= lb & set <= up] > > Unfortunately with my data I used I got around 8000 values from my set with > version1 but about 24000 with version2. IS there some main diffrence I > didn't take into account or is my system just behaving irrational (that's > what I think if you look at Example2)? > > I checked the behaviour under R-2.4.1 (Windows) and under 2.2.1 (Linux). The > result was the same. > > Sincere regards > > Benjamin Otto > >-- Roger Bivand Economic Geography Section, Department of Economics, Norwegian School of Economics and Business Administration, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: Roger.Bivand at nhh.no
Apparently Analagous Threads
- YALAQ - Yet Another LApply Question
- how to get acts_as_versioned able to delete only selected ve
- possible bug: edge rails, nested resources and images
- Odd results with Chi-square test. (Not an R problem, but general statistics, I think)
- [LLVMdev] 2.1 Pre-Release Available (testers needed)