Has anyone come across the right combinations to print a limited number of digits? My trial and error approach is taking too much time. Here is what I have tried:> op <- options()> a <- c(1e-10,1,2,3,.5,.25)> names(a) <- c("A", "B", "C", "D", "E", "F")> # default> aA B C D E F 1.0e-10 1.0e+00 2.0e+00 3.0e+00 5.0e-01 2.5e-01> options(digits = 4, scipen=5)> # Doesn't print exponents but there are too many trailing digits> aA B C D E F 0.0000000001 1.0000000000 2.0000000000 3.0000000000 0.5000000000 0.2500000000> options(digits = 3, scipen=4)> # Now we are back to exponents> aA B C D E F 1.0e-10 1.0e+00 2.0e+00 3.0e+00 5.0e-01 2.5e-01 I would like the integers to print as integers (1,2,3). The larger fractions to print something like .5000 or .2500. And the very small number to use exponents (1.0e-10) Is this possible? Thank you. Kevin [[alternative HTML version deleted]]
Hi Kevin, I am not sure you will find anything other than manual tweaking, that will vary between no decimals for integers, some for small fractions, and scientific for very small. You can also look at: ?round ?format. If this is for code/a report, you could make any formatting you wanted with enough effort and those. Best regards, Josh On Tue, Nov 15, 2011 at 8:18 AM, Kevin Burton <rkevinburton at charter.net> wrote:> Has anyone come across the right combinations to print a limited number of > digits? My trial and error approach is taking too much time. Here is what I > have tried: > > > >> op <- options() > >> a <- c(1e-10,1,2,3,.5,.25) > >> names(a) <- c("A", "B", "C", "D", "E", "F") > >> # default > >> a > > ? ? ?A ? ? ? B ? ? ? C ? ? ? D ? ? ? E ? ? ? F > > 1.0e-10 1.0e+00 2.0e+00 3.0e+00 5.0e-01 2.5e-01 > >> options(digits = 4, scipen=5) > >> # Doesn't print exponents but there are too many trailing digits > >> a > > ? ? ? ? ? A ? ? ? ? ? ?B ? ? ? ? ? ?C ? ? ? ? ? ?D ? ? ? ? ? ?E > F > > 0.0000000001 1.0000000000 2.0000000000 3.0000000000 0.5000000000 > 0.2500000000 > > > >> options(digits = 3, scipen=4) > >> # Now we are back to exponents > >> a > > ? ? ?A ? ? ? B ? ? ? C ? ? ? D ? ? ? E ? ? ? F > > 1.0e-10 1.0e+00 2.0e+00 3.0e+00 5.0e-01 2.5e-01 > > > > I would like the integers to print as integers (1,2,3). The larger fractions > to print something like .5000 or .2500. And the very small number to use > exponents (1.0e-10) > > > > Is this possible? > > > > Thank you. > > > > Kevin > > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >-- Joshua Wiley Ph.D. Student, Health Psychology Programmer Analyst II, ATS Statistical Consulting Group University of California, Los Angeles https://joshuawiley.com/
When you print a vector R uses a single format for the whole vector and tries to come up with one format that displays all the values accurately enough. For a matrix (or data.frame) it uses a different format for each column, so perhaps you would like the output of: > matrix(a, nrow=1, dimnames=list("", names(a))) A B C D E F 1e-10 1 2 3 0.5 0.25 Now you said you wanted a minimum of 4 digits after the decimal point for "large fractions" like 0.25 but only 2 when using scientific notation for "small fractions" like 1.0e-10 and you didn't say what you wanted for big numbers like pi*10^10. That rule seems complicated enough that you may want to write your own print function based on sprintf(). Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Kevin Burton > Sent: Tuesday, November 15, 2011 8:19 AM > To: r-help at r-project.org > Subject: [R] Controlling the precision of the digits printed > > Has anyone come across the right combinations to print a limited number of > digits? My trial and error approach is taking too much time. Here is what I > have tried: > > > > > op <- options() > > > a <- c(1e-10,1,2,3,.5,.25) > > > names(a) <- c("A", "B", "C", "D", "E", "F") > > > # default > > > a > > A B C D E F > > 1.0e-10 1.0e+00 2.0e+00 3.0e+00 5.0e-01 2.5e-01 > > > options(digits = 4, scipen=5) > > > # Doesn't print exponents but there are too many trailing digits > > > a > > A B C D E > F > > 0.0000000001 1.0000000000 2.0000000000 3.0000000000 0.5000000000 > 0.2500000000 > > > > > options(digits = 3, scipen=4) > > > # Now we are back to exponents > > > a > > A B C D E F > > 1.0e-10 1.0e+00 2.0e+00 3.0e+00 5.0e-01 2.5e-01 > > > > I would like the integers to print as integers (1,2,3). The larger fractions > to print something like .5000 or .2500. And the very small number to use > exponents (1.0e-10) > > > > Is this possible? > > > > Thank you. > > > > Kevin > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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.