我知道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
吗? (如果我需要使用collapse
或sep
参数,那么显然sprintf()
将不会这样做。
我唯一能想到的是,sprintf()
可能会慢一些,因为它会检查类型是否匹配。
答案 0 :(得分:9)
我可以考虑使用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