From huber at ebi.ac.uk  Tue Feb 15 10:56:02 2005
From: huber at ebi.ac.uk (Wolfgang Huber)
Date: Tue Feb 15 10:56:18 2005
Subject: [Rd] sprintf - was formatC with illegal input crashes Rgui
	(PR#7686)
In-Reply-To: <x2mzu7jp4c.fsf@biostat.ku.dk>
References: <20050211175824.5EB48DEE7@slim.kubism.ku.dk>	<Pine.LNX.4.61.0502140956020.29523@gannet.stats>	<4210741A.8040606@ebi.ac.uk>	<Pine.LNX.4.61.0502141052360.30303@gannet.stats>	<42107994.9070500@ebi.ac.uk>
	<x2mzu7jp4c.fsf@biostat.ku.dk>
Message-ID: <4211C732.6050402@ebi.ac.uk>

Hi Peter,

thanks. Yet my intention was not to discuss whether this could be done 
at all (never had any doubts about that), but how it could be done 
nicely and conveniently for the application programmer.

   Best regards
   Wolfgang

Peter Dalgaard wrote:
> Wolfgang Huber <huber@ebi.ac.uk> writes:
> 
> 
>>Personally, I would prefer the recycling, but of course it can be also
>>done this way:
>>
>> > mapply(sprintf, "%04d %s", 1:3, "abc")
>>    %04d %s       <NA>       <NA>
>>"0001 abc" "0002 abc" "0003 abc"
>>
>>the only slightly unaesthetic thing being the names of the resulting vector.
> 
> 
> ...which is of course fixable with either of
> 
> 
> 
>>mapply(sprintf, MoreArgs=list(fmt="%04d %s"), 1:3, "abc")
> 
> [1] "0001 abc" "0002 abc" "0003 abc"
> 
>>mapply(sprintf, 1:3, "abc", fmt="%04d %s")
> 
> [1] "0001 abc" "0002 abc" "0003 abc"
> 
>>mapply(sprintf, "%04d %s", 1:3, "abc", USE.NAMES=FALSE)
> 
> [1] "0001 abc" "0002 abc" "0003 abc"
> 
> (Only the last one is completely failsafe since the first two relies
> on 1:3 not being character:
> 
>     if (USE.NAMES && length(dots) && is.character(dots[[1]]) &&
>         is.null(names(answer)))
>         names(answer) <- dots[[1]]
> )


[Rd] sprintf - was formatC with illegal input crashes Rgui (PR#7686)
Wolfgang Huber