[R] sprintf question

Duncan Murdoch murdoch at stats.uwo.ca
Wed May 3 18:45:48 CEST 2006


On 5/3/2006 12:31 PM, Paul Roebuck wrote:
> How would one go about getting sprintf to use the
> values of a vector without having to specify each
> argument individually?
> 
>> v <- c(1, 2, -1.197114, 0.1596687)
>> iv <- c(3, 1, 2, 4)
>> sprintf("%9.2f\t%d\t%d\t%8.3f", v[3], v[1], v[2], v[4])
> [1] "    -1.20\t1\t2\t   0.160"
> 
> Essentially, desired effect would be something like:
>> sprintf("%9.2f\t%d\t%d\t%8.3f", v[iv]) # wish it worked

Like most R functions, the latter would be interpreted as a request for 
4 strings corresponding to the 4 input values.  What you want to do is 
probably easiest the way you did it, but it could also be done as

do.call(sprintf, c("%9.2f\t%d\t%d\t%8.3f", as.list(v[iv])))

where the argument list to sprintf is being constructed 
programmatically.  I'd certainly find the original version preferable if 
this were my code, but maybe the real situation is more complicated.

Another possibility is to name the elements of v, then you can do things 
like

v["foo"], v["bar"], etc.

Duncan Murdoch




More information about the R-help mailing list