Michael Chirico
2017-May-19 15:23 UTC
[Rd] Inconsistency in handling of numeric input with %d by sprintf
Consider
#as.numeric for emphasis
sprintf('%d', as.numeric(1))
# [1] "1"
vs.
sprintf('%d', NA_real_)
> Error in sprintf("%d", NA_real_) :
invalid format '%d'; use format %f, %e, %g or %a for numeric
object>
I understand the error is correct, but if it works for other numeric input,
why doesn't R just coerce NA_real_ to NA_integer_?
Michael Chirico
[[alternative HTML version deleted]]
Evan Cortens
2017-May-23 14:53 UTC
[Rd] Inconsistency in handling of numeric input with %d by sprintf
Hi Michael,
I posted something on this topic to R-devel several weeks ago, but never
got a response. My ultimate conclusion is that sprintf() isn't super
consistent in how it handles coercion: sometimes it'll coerce real to
integer without complaint, other times it won't. (My particular email had
to do with the vectors longer than 1 and their positioning vis-a-vis the
format string.) The safest thing is just to pass the right type. In this
case, sprintf('%d', as.integer(NA_real_)) works.
Best,
Evan
On Fri, May 19, 2017 at 9:23 AM, Michael Chirico <michaelchirico4 at
gmail.com>
wrote:
> Consider
>
> #as.numeric for emphasis
> sprintf('%d', as.numeric(1))
> # [1] "1"
>
> vs.
>
> sprintf('%d', NA_real_)
>
> > Error in sprintf("%d", NA_real_) :
>
> invalid format '%d'; use format %f, %e, %g or %a for numeric
object
> >
>
> I understand the error is correct, but if it works for other numeric input,
> why doesn't R just coerce NA_real_ to NA_integer_?
>
> Michael Chirico
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
--
Evan Cortens, PhD
Institutional Analyst - Office of Institutional Analysis
Mount Royal University
403-440-6529
[[alternative HTML version deleted]]
Joris Meys
2017-May-23 15:53 UTC
[Rd] Inconsistency in handling of numeric input with %d by sprintf
I initially thought this is "documented behaviour". ?sprintf says: Numeric variables with __exactly integer__ values will be coerced to integer. (emphasis mine). Turns out this only works when the first value is numeric and not NA, as shown by the following example:> sprintf("%d", as.numeric(c(NA,1)))Error in sprintf("%d", as.numeric(c(NA, 1))) : invalid format '%d'; use format %f, %e, %g or %a for numeric objects> sprintf("%d", as.numeric(c(1,NA)))[1] "1" "NA" So the safest thing is indeed passing the right type, but the behaviour is indeed confusing. I checked this on both Windows and Debian, and on both systems I get the exact same response. Cheers Joris On Tue, May 23, 2017 at 4:53 PM, Evan Cortens <ecortens at mtroyal.ca> wrote:> Hi Michael, > > I posted something on this topic to R-devel several weeks ago, but never > got a response. My ultimate conclusion is that sprintf() isn't super > consistent in how it handles coercion: sometimes it'll coerce real to > integer without complaint, other times it won't. (My particular email had > to do with the vectors longer than 1 and their positioning vis-a-vis the > format string.) The safest thing is just to pass the right type. In this > case, sprintf('%d', as.integer(NA_real_)) works. > > Best, > > Evan > > On Fri, May 19, 2017 at 9:23 AM, Michael Chirico < > michaelchirico4 at gmail.com> > wrote: > > > Consider > > > > #as.numeric for emphasis > > sprintf('%d', as.numeric(1)) > > # [1] "1" > > > > vs. > > > > sprintf('%d', NA_real_) > > > > > Error in sprintf("%d", NA_real_) : > > > > invalid format '%d'; use format %f, %e, %g or %a for numeric object > > > > > > > I understand the error is correct, but if it works for other numeric > input, > > why doesn't R just coerce NA_real_ to NA_integer_? > > > > Michael Chirico > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > > > -- > Evan Cortens, PhD > Institutional Analyst - Office of Institutional Analysis > Mount Royal University > 403-440-6529 > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Joris Meys Statistical consultant Ghent University Faculty of Bioscience Engineering Department of Mathematical Modelling, Statistics and Bio-Informatics tel : +32 (0)9 264 61 79 Joris.Meys at Ugent.be ------------------------------- Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php [[alternative HTML version deleted]]
Reasonably Related Threads
- Inconsistency in handling of numeric input with %d by sprintf
- Inconsistency in handling of numeric input with %d by sprintf
- Inconsistency in handling of numeric input with %d by sprintf
- Inconsistency in handling of numeric input with %d by sprintf
- Inconsistency in handling of numeric input with %d by sprintf