sprintf与paste0的效率/比较

时间:2015-02-01 03:43:36

标签: 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)

我发现sprintf()版本更容易编写,代码也不那么笨重。我找不到任何关于一方的益处的讨论。当我需要sprintf()的基本功能时,我有什么理由不使用paste吗? (如果我需要使用collapsesep参数,那么显然sprintf()将不会这样做。

我唯一能想到的是,sprintf()可能会慢一些,因为它会检查类型是否匹配。

1 个答案:

答案 0 :(得分:9)

我可以考虑使用paste0paste代替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