sprintf与paste0的效率/比较

sprintf与paste0的效率/比较,r,R,我知道paste()和paste0()在R中非常流行,但当我想用一些变量构建一个长字符串时,我发现自己经常使用sprintf() 比如说 x <- "a" y <- 10 paste0("The value of x is ", x, " and y is ", y, ".") sprintf("The value of x is %s and y is %d.", x, y) x我可以考虑使用paste0或paste而不是sprintf的一个原因是,您不需要考虑传递的参数类型 就

我知道
paste()
paste0()
在R中非常流行,但当我想用一些变量构建一个长字符串时,我发现自己经常使用
sprintf()

比如说

x <- "a"
y <- 10
paste0("The value of x is ", x, " and y is ", y, ".")
sprintf("The value of x is %s and y is %d.", x, y)

x我可以考虑使用
paste0
paste
而不是
sprintf
的一个原因是,您不需要考虑传递的参数类型

就效率而言,
sprintf
似乎有优势,至少在您给出的示例和我的机器上:

library(microbenchmark)
microbenchmark(paste0("The value of x is ", x, " and y is ", y, "."),
               sprintf("The value of x is %s and y is %d.", x, y))
# Unit: microseconds
#                                                   expr   min     lq    mean median     uq    max neval
#  paste0("The value of x is ", x, " and y is ", y, ".") 2.924 3.0185 3.45632 3.0950 3.1575 36.421   100
#     sprintf("The value of x is %s and y is %d.", x, y) 1.328 1.4130 1.54794 1.4535 1.5430  7.513   100

等等,是这样吗?这仅仅是一个字符串吗?我认为您不必考虑使用sprintf的类型,很多时候,您可以不使用
%s
,即使它是数字。正如我所说,当应该使用
collapse
sep
参数时,我不会使用
sprintf
,但在构建字符串的简单情况下,我想知道为什么大多数人不使用sprintf?@RichardScriven是的,我只是在我的基准测试中添加了
stri_c
,它实际上是3个选项中最慢的。不确定(在最新的macbook air上运行)结果的普遍性如何。@RichardScriven你在问基准测试结果是否正确吗?我还在ThinkPad机器上看到,在这种情况下,
sprintf
更快,但要小心。人们在这里争论几毫秒:-)