Hi Or you could use rounding. which(round(lut, 3)==1.8) [1] 401 Cheers Petr> -----Original Message----- > From: R-help <r-help-bounces at r-project.org> On Behalf Of Ben Tupper > Sent: Thursday, January 17, 2019 2:43 PM > To: POLWART, Calum (COUNTY DURHAM AND DARLINGTON NHS > FOUNDATION TRUST) <calum.polwart at nhs.net> > Cc: r-help at r-project.org > Subject: Re: [R] I can't get seq to behave how I think it should > > Hi, > > This looks like a floating point reality bump - see > > https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think- > these-numbers-are-equal_003f <https://cran.r-project.org/doc/FAQ/R- > FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f> > > You can use other methods to finding your row - I would opt for findInterval() > > > lut = seq(1.4, 2.1, by=0.001) > > findInterval(1.8, lut) > [1] 401 > > findInterval() uses a rapid search to find the index in the look up table (lut) that > is just less than or equal to the search value (in your example 1.8). > > Cheers, > Ben > > > On Jan 17, 2019, at 8:33 AM, POLWART, Calum (COUNTY DURHAM AND > DARLINGTON NHS FOUNDATION TRUST) via R-help <r-help at r-project.org> > wrote: > > > > I am using seq with the expression seq(1.4, 2.1, by=0.001) to create a > > sequence of references from 1.4 to 2.1 in 0.001 increments. They > > appear to be created correctly. They have a related pair of data > > which for the purposes of this we will call val. I'm interested in > > the content on the row with seq = 1.8. But I can't seem to get it > > returned. I can get other values but not 1.8! yet looking at row 401 > > there is nothing to indicate an issue > > > >> a = 1.4 > >> b = 2.1 > >> seq = seq(a, b, by=0.001) > >> val = ceiling(seq * 50) > >> s=data.frame(seq, val) > >> s$val[seq==1.799] > > [1] 90 > >> s$val[s$seq==1.8] > > numeric(0) > >> s$val[seq==1.8] > > numeric(0) > >> s$val[s$seq==1.800] > > numeric(0) > >> s$val[s$seq==1.801] > > [1] 91 > >> head(s[s$seq>1.798,]) > > seq val > > 400 1.799 90 > > 401 1.800 90 > > 402 1.801 91 > > 403 1.802 91 > > 404 1.803 91 > > 405 1.804 91 > > > > > > Can anyone explain what's going on here and how I would correctly find the > content of row 401 by using an expression to equal the seq column? > > > > > > > > > > > > > ******************************************************************* > *** > > ********************************************** > > > > This message may contain confidential information. If > > ...{{dropped:25}} > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.Osobn? ?daje: Informace o zpracov?n? a ochran? osobn?ch ?daj? obchodn?ch partner? PRECHEZA a.s. jsou zve?ejn?ny na: https://www.precheza.cz/zasady-ochrany-osobnich-udaju/ | Information about processing and protection of business partner?s personal data are available on website: https://www.precheza.cz/en/personal-data-protection-principles/ D?v?rnost: Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a podl?haj? tomuto pr?vn? z?vazn?mu prohl??en? o vylou?en? odpov?dnosti: https://www.precheza.cz/01-dovetek/ | This email and any documents attached to it may be confidential and are subject to the legally binding disclaimer: https://www.precheza.cz/en/01-disclaimer/
POLWART, Calum (COUNTY DURHAM AND DARLINGTON NHS FOUNDATION TRUST)
2019-Jan-17 13:56 UTC
[R] I can't get seq to behave how I think it should
Thanks guys. I've used Petr's method and its working for me. If the data had been from a calculation I'd have rounded it... just didn't expect seq to break it! C -----Original Message----- From: PIKAL Petr [mailto:petr.pikal at precheza.cz] Sent: 17 January 2019 13:53 To: Ben Tupper; POLWART, Calum (COUNTY DURHAM AND DARLINGTON NHS FOUNDATION TRUST) Cc: r-help at r-project.org Subject: RE: [R] I can't get seq to behave how I think it should Hi Or you could use rounding. which(round(lut, 3)==1.8) [1] 401 Cheers Petr> -----Original Message----- > From: R-help <r-help-bounces at r-project.org> On Behalf Of Ben Tupper > Sent: Thursday, January 17, 2019 2:43 PM > To: POLWART, Calum (COUNTY DURHAM AND DARLINGTON NHS FOUNDATION TRUST) > <calum.polwart at nhs.net> > Cc: r-help at r-project.org > Subject: Re: [R] I can't get seq to behave how I think it should > > Hi, > > This looks like a floating point reality bump - see > > https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think- > these-numbers-are-equal_003f <https://cran.r-project.org/doc/FAQ/R- > FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f> > > You can use other methods to finding your row - I would opt for > findInterval() > > > lut = seq(1.4, 2.1, by=0.001) > > findInterval(1.8, lut) > [1] 401 > > findInterval() uses a rapid search to find the index in the look up > table (lut) that is just less than or equal to the search value (in your example 1.8). > > Cheers, > Ben > > > On Jan 17, 2019, at 8:33 AM, POLWART, Calum (COUNTY DURHAM AND > DARLINGTON NHS FOUNDATION TRUST) via R-help <r-help at r-project.org> > wrote: > > > > I am using seq with the expression seq(1.4, 2.1, by=0.001) to create > > a sequence of references from 1.4 to 2.1 in 0.001 increments. They > > appear to be created correctly. They have a related pair of data > > which for the purposes of this we will call val. I'm interested in > > the content on the row with seq = 1.8. But I can't seem to get it > > returned. I can get other values but not 1.8! yet looking at row > > 401 there is nothing to indicate an issue > > > >> a = 1.4 > >> b = 2.1 > >> seq = seq(a, b, by=0.001) > >> val = ceiling(seq * 50) > >> s=data.frame(seq, val) > >> s$val[seq==1.799] > > [1] 90 > >> s$val[s$seq==1.8] > > numeric(0) > >> s$val[seq==1.8] > > numeric(0) > >> s$val[s$seq==1.800] > > numeric(0) > >> s$val[s$seq==1.801] > > [1] 91 > >> head(s[s$seq>1.798,]) > > seq val > > 400 1.799 90 > > 401 1.800 90 > > 402 1.801 91 > > 403 1.802 91 > > 404 1.803 91 > > 405 1.804 91 > > > > > > Can anyone explain what's going on here and how I would correctly > > find the > content of row 401 by using an expression to equal the seq column? > > > > > > > > > > > > > ******************************************************************* > *** > > ********************************************** > > > > This message may contain confidential information. If > > ...{{dropped:25}} > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.Osobn? ?daje: Informace o zpracov?n? a ochran? osobn?ch ?daj? obchodn?ch partner? PRECHEZA a.s. jsou zve?ejn?ny na: https://www.precheza.cz/zasady-ochrany-osobnich-udaju/ | Information about processing and protection of business partner?s personal data are available on website: https://www.precheza.cz/en/personal-data-protection-principles/ D?v?rnost: Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a podl?haj? tomuto pr?vn? z?vazn?mu prohl??en? o vylou?en? odpov?dnosti: https://www.precheza.cz/01-dovetek/ | This email and any documents attached to it may be confidential and are subject to the legally binding disclaimer: https://www.precheza.cz/en/01-disclaimer/ ******************************************************************************************************************** This message may contain confidential information. If you are not the intended recipient please inform the sender that you have received the message in error before deleting it. Please do not disclose, copy or distribute information in this e-mail or take any action in relation to its contents. To do so is strictly prohibited and may be unlawful. Thank you for your co-operation. NHSmail is the secure email and directory service available for all NHS staff in England and Scotland. NHSmail is approved for exchanging patient data and other sensitive information with NHSmail and other accredited email services. For more information and to find out how you can switch, https://portal.nhs.net/help/joiningnhsmail
Hi It is not seq problem, it is floating point numbers representation in finit precision problem. Ben pointed to it and you could learn about it from FAQ 7.31. Cheers Petr> -----Original Message----- > From: POLWART, Calum (COUNTY DURHAM AND DARLINGTON NHS > FOUNDATION TRUST) <calum.polwart at nhs.net> > Sent: Thursday, January 17, 2019 2:56 PM > To: PIKAL Petr <petr.pikal at precheza.cz>; Ben Tupper <btupper at bigelow.org> > Cc: r-help at r-project.org > Subject: RE: [R] I can't get seq to behave how I think it should > > Thanks guys. > > I've used Petr's method and its working for me. > > If the data had been from a calculation I'd have rounded it... just didn't expect > seq to break it! > > C > > -----Original Message----- > From: PIKAL Petr [mailto:petr.pikal at precheza.cz] > Sent: 17 January 2019 13:53 > To: Ben Tupper; POLWART, Calum (COUNTY DURHAM AND DARLINGTON NHS > FOUNDATION TRUST) > Cc: r-help at r-project.org > Subject: RE: [R] I can't get seq to behave how I think it should > > Hi > > Or you could use rounding. > which(round(lut, 3)==1.8) > [1] 401 > > Cheers > Petr > > > -----Original Message----- > > From: R-help <r-help-bounces at r-project.org> On Behalf Of Ben Tupper > > Sent: Thursday, January 17, 2019 2:43 PM > > To: POLWART, Calum (COUNTY DURHAM AND DARLINGTON NHS > FOUNDATION TRUST) > > <calum.polwart at nhs.net> > > Cc: r-help at r-project.org > > Subject: Re: [R] I can't get seq to behave how I think it should > > > > Hi, > > > > This looks like a floating point reality bump - see > > > > https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think- > > these-numbers-are-equal_003f <https://cran.r-project.org/doc/FAQ/R- > > FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f> > > > > You can use other methods to finding your row - I would opt for > > findInterval() > > > > > lut = seq(1.4, 2.1, by=0.001) > > > findInterval(1.8, lut) > > [1] 401 > > > > findInterval() uses a rapid search to find the index in the look up > > table (lut) that is just less than or equal to the search value (in your example > 1.8). > > > > Cheers, > > Ben > > > > > On Jan 17, 2019, at 8:33 AM, POLWART, Calum (COUNTY DURHAM AND > > DARLINGTON NHS FOUNDATION TRUST) via R-help <r-help at r-project.org> > > wrote: > > > > > > I am using seq with the expression seq(1.4, 2.1, by=0.001) to create > > > a sequence of references from 1.4 to 2.1 in 0.001 increments. They > > > appear to be created correctly. They have a related pair of data > > > which for the purposes of this we will call val. I'm interested in > > > the content on the row with seq = 1.8. But I can't seem to get it > > > returned. I can get other values but not 1.8! yet looking at row > > > 401 there is nothing to indicate an issue > > > > > >> a = 1.4 > > >> b = 2.1 > > >> seq = seq(a, b, by=0.001) > > >> val = ceiling(seq * 50) > > >> s=data.frame(seq, val) > > >> s$val[seq==1.799] > > > [1] 90 > > >> s$val[s$seq==1.8] > > > numeric(0) > > >> s$val[seq==1.8] > > > numeric(0) > > >> s$val[s$seq==1.800] > > > numeric(0) > > >> s$val[s$seq==1.801] > > > [1] 91 > > >> head(s[s$seq>1.798,]) > > > seq val > > > 400 1.799 90 > > > 401 1.800 90 > > > 402 1.801 91 > > > 403 1.802 91 > > > 404 1.803 91 > > > 405 1.804 91 > > > > > > > > > Can anyone explain what's going on here and how I would correctly > > > find the > > content of row 401 by using an expression to equal the seq column? > > > > > > > > > > > > > > > > > > > > > ******************************************************************* > > *** > > > ********************************************** > > > > > > This message may contain confidential information. If > > > ...{{dropped:25}} > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > 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. > Osobn? ?daje: Informace o zpracov?n? a ochran? osobn?ch ?daj? obchodn?ch > partner? PRECHEZA a.s. jsou zve?ejn?ny na: https://www.precheza.cz/zasady- > ochrany-osobnich-udaju/ | Information about processing and protection of > business partner?s personal data are available on website: > https://www.precheza.cz/en/personal-data-protection-principles/ > D?v?rnost: Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? > a podl?haj? tomuto pr?vn? z?vazn?mu prohl??en? o vylou?en? odpov?dnosti: > https://www.precheza.cz/01-dovetek/ | This email and any documents > attached to it may be confidential and are subject to the legally binding > disclaimer: https://www.precheza.cz/en/01-disclaimer/ > > > > ******************************************************************* > ************************************************* > > This message may contain confidential information. If you are not the intended > recipient please inform the sender that you have received the message in error > before deleting it. > Please do not disclose, copy or distribute information in this e-mail or take any > action in relation to its contents. To do so is strictly prohibited and may be > unlawful. Thank you for your co-operation. > > NHSmail is the secure email and directory service available for all NHS staff in > England and Scotland. NHSmail is approved for exchanging patient data and > other sensitive information with NHSmail and other accredited email services. > > For more information and to find out how you can switch, > https://portal.nhs.net/help/joiningnhsmailOsobn? ?daje: Informace o zpracov?n? a ochran? osobn?ch ?daj? obchodn?ch partner? PRECHEZA a.s. jsou zve?ejn?ny na: https://www.precheza.cz/zasady-ochrany-osobnich-udaju/ | Information about processing and protection of business partner?s personal data are available on website: https://www.precheza.cz/en/personal-data-protection-principles/ D?v?rnost: Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a podl?haj? tomuto pr?vn? z?vazn?mu prohl??en? o vylou?en? odpov?dnosti: https://www.precheza.cz/01-dovetek/ | This email and any documents attached to it may be confidential and are subject to the legally binding disclaimer: https://www.precheza.cz/en/01-disclaimer/
>>>>> PIKAL Petr >>>>> on Thu, 17 Jan 2019 13:52:39 +0000 writes:> Hi > Or you could use rounding. yes. > which(round(lut, 3)==1.8) > [1] 401 no! This may work accidentally here, but in principle still suffers for the same reasons as the infamous FAQ 7.31 "Why doesn?t R think these numbers are equal?" (link below) gives. To be sure you should round to *integer*s (or other multiples of 2 ^{-k}, k \in {0,1,...,31}). 1.8 is not exactly representable as a (double precision) floating point number in binary representation. Your example here works because the rounding typically happens to end up with the same binary repr ... this all relies on too many details to be recommendable. Martin Maechler ETH Zurich and R Core team >> -----Original Message----- >> From: R-help <r-help-bounces at r-project.org> On Behalf Of Ben Tupper >> Sent: Thursday, January 17, 2019 2:43 PM >> To: POLWART, Calum (COUNTY DURHAM AND DARLINGTON NHS >> FOUNDATION TRUST) <calum.polwart at nhs.net> >> Cc: r-help at r-project.org >> Subject: Re: [R] I can't get seq to behave how I think it should >> >> Hi, >> >> This looks like a floating point reality bump - see >> >> https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think- >> these-numbers-are-equal_003f <https://cran.r-project.org/doc/FAQ/R- >> FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f> >> >> You can use other methods to finding your row - I would opt for findInterval() >> >> > lut = seq(1.4, 2.1, by=0.001) >> > findInterval(1.8, lut) >> [1] 401 >> >> findInterval() uses a rapid search to find the index in the look up table (lut) that >> is just less than or equal to the search value (in your example 1.8). >> >> Cheers, >> Ben >> >> > On Jan 17, 2019, at 8:33 AM, POLWART, Calum (COUNTY DURHAM AND >> DARLINGTON NHS FOUNDATION TRUST) via R-help <r-help at r-project.org> >> wrote: >> > >> > I am using seq with the expression seq(1.4, 2.1, by=0.001) to create a >> > sequence of references from 1.4 to 2.1 in 0.001 increments. They >> > appear to be created correctly. They have a related pair of data >> > which for the purposes of this we will call val. I'm interested in >> > the content on the row with seq = 1.8. But I can't seem to get it >> > returned. I can get other values but not 1.8! yet looking at row 401 >> > there is nothing to indicate an issue >> > >> >> a = 1.4 >> >> b = 2.1 >> >> seq = seq(a, b, by=0.001) >> >> val = ceiling(seq * 50) >> >> s=data.frame(seq, val) >> >> s$val[seq==1.799] >> > [1] 90 >> >> s$val[s$seq==1.8] >> > numeric(0) >> >> s$val[seq==1.8] >> > numeric(0) >> >> s$val[s$seq==1.800] >> > numeric(0) >> >> s$val[s$seq==1.801] >> > [1] 91 >> >> head(s[s$seq>1.798,]) >> > seq val >> > 400 1.799 90 >> > 401 1.800 90 >> > 402 1.801 91 >> > 403 1.802 91 >> > 404 1.803 91 >> > 405 1.804 91 >> > >> > >> > Can anyone explain what's going on here and how I would correctly find the >> content of row 401 by using an expression to equal the seq column? >> > >> > >> > >> > >> > >> > >> ******************************************************************* >> *** >> > ********************************************** >> > >> > This message may contain confidential information. If >> > ...{{dropped:25}} >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. > Osobn? ?daje: Informace o zpracov?n? a ochran? osobn?ch ?daj? obchodn?ch partner? PRECHEZA a.s. jsou zve?ejn?ny na: https://www.precheza.cz/zasady-ochrany-osobnich-udaju/ | Information about processing and protection of business partner?s personal data are available on website: https://www.precheza.cz/en/personal-data-protection-principles/ > D?v?rnost: Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a podl?haj? tomuto pr?vn? z?vazn?mu prohl??en? o vylou?en? odpov?dnosti: https://www.precheza.cz/01-dovetek/ | This email and any documents attached to it may be confidential and are subject to the legally binding disclaimer: https://www.precheza.cz/en/01-disclaimer/ > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.