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
更快,但要小心。人们在这里争论几毫秒:-)