用sprintf折叠字符向量而不是粘贴

时间:2014-05-14 12:16:55

标签: string r printf paste

我过去主要使用pastepaste0作为我的粘贴任务,但我对sprintf的速度非常着迷。但我觉得我缺乏一些基础知识。

只是想知道是否还有一种方法可以将多元素字符向量折叠为长度为1,因为paste在使用collapse参数时会做到这一点,即无需手动指定相应的通配符及其值(在paste中,我只需将任务留给函数以找出应折叠的元素数量。)

x <- c("Pasted string:", "hello", "world!")

> sprintf("%s %s %s", x[1], x[2], x[3])
[1] "Pasted string: hello world!"
> paste(x, collapse=" ")
[1] "Pasted string: hello world!"

我正在寻找类似这样的东西(伪代码)

> sprintf("<the-correct-parameter>", x)
[1] "Pasted string: hello world"

感兴趣:sprintfpaste

的基准
require("microbenchmark")
t1 <- median(microbenchmark(sprintf("%s %s %s", x[1], x[2], x[3]))$time)
t2 <- median(microbenchmark(paste(x, collapse=" "))$time)

> t1/t2
[1] 0.7273114

1 个答案:

答案 0 :(得分:1)

函数sprintf回收其格式字符串,例如代码

cat(sprintf("%8.4f",rnorm(5)),"\n")

打印类似

的内容

-0.5685 -0.6481 0.6296 -0.0043 -1.4763

str = sprintf("%8.4f",rnorm(5))

将输出存储在字符串向量和

str_one = paste(sprintf("%8.4f",rnorm(5)),collapse='')

将输出存储在单个字符串中。格式字符串不需要指定要打印的浮点数。这也适用于使用%d和%s格式打印整数和字符串。