В 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