Thanks for the contribution Mikko!
For testing future patches, you can actually do it right in the web
browser, thanks to Heather Turner's R Dev Container, see instructions here
https://contributor.r-project.org/r-dev-env/container_setup/
Best
Toby

On Mon, May 26, 2025 at 6:28 PM Martin Maechler <maech...@stat.math.ethz.ch>
wrote:

> Thank you,  Marttila  and Ivan,
>
> As the original author of prettyNum() {etc ..},
> I will commit such a bug fix to R-devel (and probably port it to
> R 4.5.0 patched) quite soon
> (but not yet today).
>
> Best regards,
>
> Martin Maechler
>
> >>>>> Ivan Krylov via R-devel
> >>>>>     on Fri, 23 May 2025 17:14:57 +0300 writes:
>
>     > В Fri, 23 May 2025 11:47:33 +0000
>     > Marttila Mikko via R-devel <r-devel@r-project.org> пишет:
>
>     >> When called with a numeric vector, the `replace.zero` argument is
>     >> disregarded.
>     >>
>     >> > prettyNum(0, zero.print = "- ", replace.zero = TRUE)
>     >> [1] "-"
>     >> Warning message:
>     >> In .format.zeros(x, zero.print, replace = replace.zero) :
>     >> 'zero.print' is truncated to fit into formatted zeros; consider
>     >> 'replace=TRUE'
>
>     >> Please see below a patch which I believe would fix this.
>
>     > Surprisingly, it's not enough. The 'replace' argument to
> .format.zeros
>     > needs to be "threaded" through both the call to vapply(x, format,
> ...)
>     > and the internal call from format.default(...) to prettyNum(...):
>
>     R> options(warn = 2, error = recover)
>     R> prettyNum(0, zero.print = "--", replace.zero = TRUE)
>     > Error in .format.zeros(x, zero.print, replace = replace.zero) :
>     > (converted from warning) 'zero.print' is truncated to fit into
> formatted zeros; consider 'replace=TRUE'
>
>     > Enter a frame number, or 0 to exit
>
>     > 1: prettyNum(0, zero.print = "--", replace.zero = TRUE)
>     > 2: vapply(x, format, "", big.mark = big.mark, big.interval =
> big.interval, sma
>     > 3: FUN(X[[i]], ...)
>     > 4: format.default(X[[i]], ...)
>     > 5: prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3,
> na.encode, sc
>     > 6: .format.zeros(x, zero.print, replace = replace.zero)
>     > 7: warning("'zero.print' is truncated to fit into formatted zeros;
> consider 'r
>     > <...omitted...>
>     > Selection: 6
>     > <...>
>     > Browse[1]> ls.str()
>     > i0 :  logi TRUE
>     > ind0 :  int 1
>     > nc :  int 1
>     > nx :  num 0
>     > nz :  int 2
>     > replace :  logi FALSE
>     > warn.non.fitting :  logi TRUE
>     > x :  chr "0"
>     > zero.print :  chr "--"
>
>     > Since prettyNum() accepts ... and thus ignores unknown arguments, it
>     > seems to be safe to forward the ellipsis from format.default() to
>     > prettyNum(). The patch survives LANGUAGE=en TZ=UTC make check-devel.
>
>     > Index: src/library/base/R/format.R
>     > ===================================================================
>     > --- src/library/base/R/format.R   (revision 88229)
>     > +++ src/library/base/R/format.R   (working copy)
>     > @@ -73,7 +73,7 @@
>     > decimal.mark = decimal.mark, input.d.mark = decimal.mark,
>     > zero.print = zero.print, drop0trailing = drop0trailing,
>     > is.cmplx = is.complex(x),
>     > -                      preserve.width = if (trim) "individual" else
> "common"),
>     > +                      preserve.width = if (trim) "individual" else
> "common", ...),
>     > ## all others (for now):
>     > stop(gettextf("Found no format() method for class \"%s\"",
>     > class(x)), domain = NA))
>     > @@ -338,7 +338,8 @@
>     > big.mark=big.mark, big.interval=big.interval,
>     > small.mark=small.mark, small.interval=small.interval,
>     > decimal.mark=decimal.mark, zero.print=zero.print,
>     > -             drop0trailing=drop0trailing, ...)
>     > +             drop0trailing=drop0trailing, replace.zero=replace.zero,
>     > +             ...)
>     > }
>     > ## be fast in trivial case, when all options have their default, or
> "match"
>     > nMark <- big.mark == "" && small.mark == "" && (notChar ||
> decimal.mark == input.d.mark)
>
>
>     > --
>     > Best regards,
>     > Ivan
>
>     > ______________________________________________
>     > R-devel@r-project.org mailing list
>     > https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to