From marc_schwartz at me.com  Sun Jun 21 01:27:45 2009
From: marc_schwartz at me.com (Marc Schwartz)
Date: Sat, 20 Jun 2009 18:27:45 -0500
Subject: [Rd] Flag '#' in sprintf() format string "%#x"?
In-Reply-To: <59d7961d0906201544x184e2d4ehd2da3cf66603a3@mail.gmail.com>
References: <59d7961d0906201544x184e2d4ehd2da3cf66603a3@mail.gmail.com>
Message-ID: <B307D518-77C8-4A5C-9378-6986B82B3B0E@me.com>


On Jun 20, 2009, at 5:44 PM, Henrik Bengtsson wrote:

> Hi, this is a bit of FYI, but also a question.
>
> Is flag '#' in sprintf() format string "%#x" fully supported across
> platforms?  Can that be assumed?  I discovered thanks to the r-forge
> service, that this was not the case for OSX with "R version 2.9.0
> Under development (unstable) (2009-01-13 r47593)", where R CMD check
> reports the following:
>
> Error in sprintf("%#x", values) :
>  use format %d, %i, %x or %X for integer objects
>
> where values <- as.integer(1:5). Note it works well on other
> platforms; I don't know about newer R version on OSX.   Should I
> consider this a glitch in an old version of R (newer R version do a
> much better validation here), or should I simply avoid '#'?
>
> Thanks,
>
> /Henrik

Henrik,

Using:

R version 2.9.0 Patched (2009-06-05 r48712)

on a fully updated OSX 10.5.7 MacBook Pro:

values <- 1:5

 > sprintf("%#x", values)
[1] "0x1" "0x2" "0x3" "0x4" "0x5"


Note that the as.integer() is not needed, as ':' will return integers  
if both from and to values are integers:

 > str(values)
  int [1:5] 1 2 3 4 5


The only comment that I see in NEWS that may be relevant here for  
2.9.0 is:

     o	sprintf() does stricter error checking on input formats to
	avoid passing invalid formats to the OS (which have a tendency
	to crash under such inputs).


HTH,

Marc Schwartz



[Rd] Flag '#' in sprintf() format string "%#x"?
Marc Schwartz