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
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html