Troels Ring
2017-Dec-25 18:12 UTC
[R] plot representation of calculated value known to be 7.4
Dear friends - merry Christmas and thanks a lot for much help during the year! In the example below I fail to understand how the calculated value pH is represented in a simple plot - also included. The calculations are useful in practice and likely to be right in principle but I cannot see how this occurs: why a calculated value of 7.4 known as numeric is not simply plotted as such. It happened on Windows both 7 and 10 with R version 3.4.1. All best wishes Troels ff <- function(H,SID,ATOT,ka)? H + SID - kw/H - ka*ATOT/(H+ka) ?ka <- 1e-7 ?kw <- 1e-14 ?ATOT <- seq(0,0.3,length=100)*1e-3 ?for (i in 1:length(ATOT))? { ?SID[i] <- uniroot(ff,c(-1,1),tol=.Machine$double.eps,maxiter=100000,ka=ka, ATOT=ATOT[i], H = 10^-7.4)$root} ATOT #confirm pH 0 7.4 H <- c() ?for (i in 1:length(ATOT))? { ?H[i] <- uniroot(ff,c(1e-19,1),tol=.Machine$double.eps,maxiter=100000,ka=ka, ATOT=ATOT[i], SID = SID[i])$root} (pH <- -log10(H)) plot(pH) str(pH) # num [1:100] 7.4 7.4 7.4 7.4 7.4 ... z <- rep(7.4,length(ATOT)) all.equal(z,pH) #TRUE points(z,col="red")
Troels Ring
2017-Dec-25 19:00 UTC
[R] plot representation of calculated value known to be 7.4
Dear friends - copy paste missed SID <- c() before the first loop - sorry BW Troels Den 25-12-2017 kl. 19:12 skrev Troels Ring:> > Dear friends - merry Christmas and thanks a lot for much help during > the year! > > In the example below I fail to understand how the calculated value pH > is represented in a simple plot - also included. The calculations are > useful in practice and likely to be right in principle but I cannot > see how this occurs: why a calculated value of 7.4 known as numeric is > not simply plotted as such. It happened on Windows both 7 and 10 with > R version 3.4.1. > > All best wishes > > Troels > > ff <- function(H,SID,ATOT,ka)? H + SID - kw/H - ka*ATOT/(H+ka) > ?ka <- 1e-7 > ?kw <- 1e-14 > ?ATOT <- seq(0,0.3,length=100)*1e-3 > > ?for (i in 1:length(ATOT))? { > ?SID[i] <- > uniroot(ff,c(-1,1),tol=.Machine$double.eps,maxiter=100000,ka=ka, > ATOT=ATOT[i], H = 10^-7.4)$root} > ATOT > > #confirm pH 0 7.4 > > H <- c() > ?for (i in 1:length(ATOT))? { > ?H[i] <- > uniroot(ff,c(1e-19,1),tol=.Machine$double.eps,maxiter=100000,ka=ka, > ATOT=ATOT[i], SID = SID[i])$root} > > (pH <- -log10(H)) > plot(pH) > str(pH) > # num [1:100] 7.4 7.4 7.4 7.4 7.4 ... > z <- rep(7.4,length(ATOT)) > all.equal(z,pH) > #TRUE > points(z,col="red") >
Bert Gunter
2017-Dec-26 00:03 UTC
[R] plot representation of calculated value known to be 7.4
Note that ?all.equal clearly says that it tests for **approximate equality only** with tolerance "close to 1.5 e-8. So..> all.equal(z,pH, tol = 1e-15)[1] "Mean relative difference: 6.732527e-11" and> print(pH, digits =15)## output omitted Shows you what's going on. Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Mon, Dec 25, 2017 at 11:00 AM, Troels Ring <tring at gvdnet.dk> wrote:> Dear friends - copy paste missed > > SID <- c() before the first loop - sorry > > BW Troels > > > > Den 25-12-2017 kl. 19:12 skrev Troels Ring: > >> >> Dear friends - merry Christmas and thanks a lot for much help during the >> year! >> >> In the example below I fail to understand how the calculated value pH is >> represented in a simple plot - also included. The calculations are useful >> in practice and likely to be right in principle but I cannot see how this >> occurs: why a calculated value of 7.4 known as numeric is not simply >> plotted as such. It happened on Windows both 7 and 10 with R version 3.4.1. >> >> All best wishes >> >> Troels >> >> ff <- function(H,SID,ATOT,ka) H + SID - kw/H - ka*ATOT/(H+ka) >> ka <- 1e-7 >> kw <- 1e-14 >> ATOT <- seq(0,0.3,length=100)*1e-3 >> >> for (i in 1:length(ATOT)) { >> SID[i] <- uniroot(ff,c(-1,1),tol=.Machine$double.eps,maxiter=100000, >> ka=ka, >> ATOT=ATOT[i], H = 10^-7.4)$root} >> ATOT >> >> #confirm pH 0 7.4 >> >> H <- c() >> for (i in 1:length(ATOT)) { >> H[i] <- uniroot(ff,c(1e-19,1),tol=.Machine$double.eps,maxiter=100000 >> ,ka=ka, >> ATOT=ATOT[i], SID = SID[i])$root} >> >> (pH <- -log10(H)) >> plot(pH) >> str(pH) >> # num [1:100] 7.4 7.4 7.4 7.4 7.4 ... >> z <- rep(7.4,length(ATOT)) >> all.equal(z,pH) >> #TRUE >> points(z,col="red") >> >> > ______________________________________________ > 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/posti > ng-guide.html > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
Troels Ring
2017-Dec-26 07:49 UTC
[R] plot representation of calculated value known to be 7.4
Thanks a lot - formatting the ordinate as ylim=c(4,10) before plotting pH also removed the problem, and options(digits=10) confirmed that pH was not all exactly 7.4 - as I knew. Still I wonder just why R chooses to plot(ATOT,pH) as shown with repeated "7.4" instead of some more detailed representation. Thanks a gain and happy New Year! Troels Den 26-12-2017 kl. 01:03 skrev Bert Gunter:> Note that ?all.equal clearly says that it tests for **approximate > equality only** with tolerance "close to 1.5 e-8. > > So.. > > > all.equal(z,pH, tol = 1e-15) > [1] "Mean relative difference: 6.732527e-11" > > and > > > print(pH, digits =15) > ## output omitted > > Shows you what's going on. > > Cheers, > Bert > > > > Bert Gunter > > "The trouble with having an open mind is that people keep coming along > and sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > On Mon, Dec 25, 2017 at 11:00 AM, Troels Ring <tring at gvdnet.dk > <mailto:tring at gvdnet.dk>> wrote: > > Dear friends - copy paste missed > > SID <- c() before the first loop - sorry > > BW Troels > > > > Den 25-12-2017 kl. 19:12 skrev Troels Ring: > > > Dear friends - merry Christmas and thanks a lot for much help > during the year! > > In the example below I fail to understand how the calculated > value pH is represented in a simple plot - also included. The > calculations are useful in practice and likely to be right in > principle but I cannot see how this occurs: why a calculated > value of 7.4 known as numeric is not simply plotted as such. > It happened on Windows both 7 and 10 with R version 3.4.1. > > All best wishes > > Troels > > ff <- function(H,SID,ATOT,ka)? H + SID - kw/H - ka*ATOT/(H+ka) > ?ka <- 1e-7 > ?kw <- 1e-14 > ?ATOT <- seq(0,0.3,length=100)*1e-3 > > ?for (i in 1:length(ATOT))? { > ?SID[i] <- > uniroot(ff,c(-1,1),tol=.Machine$double.eps,maxiter=100000,ka=ka, > ATOT=ATOT[i], H = 10^-7.4)$root} > ATOT > > #confirm pH 0 7.4 > > H <- c() > ?for (i in 1:length(ATOT))? { > ?H[i] <- > uniroot(ff,c(1e-19,1),tol=.Machine$double.eps,maxiter=100000,ka=ka, > ATOT=ATOT[i], SID = SID[i])$root} > > (pH <- -log10(H)) > plot(pH) > str(pH) > # num [1:100] 7.4 7.4 7.4 7.4 7.4 ... > z <- rep(7.4,length(ATOT)) > all.equal(z,pH) > #TRUE > points(z,col="red") > > > ______________________________________________ > R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- > To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > <https://stat.ethz.ch/mailman/listinfo/r-help> > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > <http://www.R-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. > >[[alternative HTML version deleted]]