[R] scales percent precision

Jacob Wegelin jacobwegelin at fastmail.fm
Thu Feb 27 20:47:39 CET 2014


But percent_format() does not take the argument, multiply it by 100, and paste on a percent sign, as we see here:

> ?scales::percent_format
> percent_format(0.0101010101)
Error in percent_format(0.0101010101) : unused argument(s) (0.0101010101)
> args(percent_format)
function () 
NULL

And how do we control the significant digits when we use percent()?

> percent(0.0101010101)
[1] "1.01%"

My point is that

> ?scales::percent_format

does not answer these questions. This is what I mean by saying that the function is not documented.

On 2014-02-27 Thu 14:34, Dennis Murphy wrote:
> Hi:
>
> On Thu, Feb 27, 2014 at 8:49 AM, Jacob Wegelin <jacobwegelin at fastmail.fm> wrote:
>>
>> scales::percent appears not to be documented.
>
> ?scales::percent_format
>
> where it tells you that it takes its argument, multiplies it by 100
> and then attaches a percent sign to it. For most situations, the data
> should be relative frequencies/proportions. BTW, many of the functions
> in the scales package are second-order R functions, which means there
> are two calls in the function invocation. The first call returns a
> function and the second is a call to the returned function.
>
>>
>> Details:
>>
>> At http://cran.r-project.org/web/packages/scales/scales.pdf, equivalently in
>> ?percent, I find no answer to the following two questions.
>>
>> (1) How can I specify the number of decimal points in a call to percent()?
>> For instance, 0.010101 could be
>>
>> 1%
>>
>> 1.0%
>>
>> 1.01%
>>
>> etc. depending on what kind of report I'm writing.
>>
>> I can control precision myself by writing
>>
>> mypercent<-function(theargument, siglevel=2) {
>>         stopifnot(is.numeric(theargument))
>>         paste(signif(theargument, siglevel) * 100, "%", sep="")
>> }
>>
>> and then we have
>>
>>> mypercent(0.010101)
>>
>> [1] "1%"
>>>
>>> mypercent(0.010101, 5)
>>
>> [1] "1.0101%"
>>>
>>> mypercent(0.010101, 3)
>>
>> [1] "1.01%"
>
> percent_format() uses pretty breaks by default, so you'd probably want
> to pass your desired labels to scale_y_continuous() directly and avoid
> percent_format(). You could call the function on a vector of breaks
> and use the return values for the labels.
>
>>
>> (2) What is the function precision() inside percent()? I find no
>> documentation for it, and in fact it does not appear in the search path. Nor
>> does round_any().
>
> round_any() comes from the plyr package. I have no idea where
> precision() comes from; I've wondered about that myself a couple of
> times. I imagine it comes from one of the imported packages, but I
> didn't find it in any of plyr, stringr or labeling. I didn't check the
> color-related packages (RColorBrewer, dichromat or munsell). It could
> also be a hidden function.
>
> Dennis
>>
>>> percent(0.010101)
>>
>> [1] "1.01%"
>>>
>>> percent
>>
>> function (x) {
>>     x <- round_any(x, precision(x)/100)
>>     str_c(comma(x * 100), "%")
>> }
>> <environment: 0x10c0f9350>
>>>
>>> find("precision")
>>
>> character(0)
>>>
>>> find("round_any")
>>
>> character(0)
>>>
>>>
>>
>> Thanks for any insights
>>
>> Jacob Wegelin
>>
>>> sessionInfo()
>>
>> R version 2.15.3 (2013-03-01)
>> Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
>>
>> locale:
>> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>>
>> attached base packages:
>>  [1] tools     grid      splines   stats     graphics  grDevices utils
>> datasets  methods   base
>>
>> other attached packages:
>> [1] scales_0.2.3    xtable_1.7-0    reshape2_1.2.2  moments_0.13
>> corrplot_0.70   ggplot2_0.9.3.1 nlme_3.1-108
>>
>> loaded via a namespace (and not attached):
>>  [1] colorspace_1.2-0   dichromat_1.2-4    digest_0.6.0       gtable_0.1.2
>> labeling_0.1       lattice_0.20-13    MASS_7.3-23        munsell_0.4
>>  [9] plyr_1.8           proto_0.3-10       psych_1.2.8
>> RColorBrewer_1.0-5 stringr_0.6.2
>>>
>>>
>>
>> ______________________________________________
>> 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.
>




More information about the R-help mailing list