[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