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