使用sprintf将符号添加到数字(0除外)

时间:2014-08-27 03:19:35

标签: r printf

使用sprintf时,"%+d"会使用sign:

打印数字
sprintf("%+d",-2:2)
[1] "-2" "-1" "+0" "+1" "+2"

是否有sprintf的参数自动转义0并获得以下内容?

[1] "-2" "-1" "0" "+1" "+2"

4 个答案:

答案 0 :(得分:3)

以下是我将如何在C中执行此操作的翻译。为正值打印前导+,并依赖于非属性的默认行为:

x <- -2:2
sprintf("%s%d", ifelse(x>0,"+",""), x)
## [1] "-2" "-1" "0"  "+1" "+2"

答案 1 :(得分:2)

您可以尝试使用gsub

删除+
 gsub("^\\+0$","0",sprintf("%+d",-2:2))
 [1] "-2" "-1" "0"  "+1" "+2"

答案 2 :(得分:1)

解决这个问题的方法之一是

> s <- sprintf("%+d",-2:2)
> s[s == "+0"] <- 0
> s
# [1] "-2" "-1" "0"  "+1" "+2"

更新:我还发现你可以这样做......

> sprintf(c(rep("%d", 3), rep("%+d", 2)), -2:2)
# [1] "-2" "-1" "0"  "+1" "+2"

这个需要特定数量的"%d" s,但这些可以很容易地计算/插入到rep调用中,以便在其他向量上使用。它还对所有四个当前答案中最快的一个进行了基准测试。

答案 3 :(得分:1)

另一个使用正向前瞻的gsub命令。

> gsub("[+](?=0)", "", sprintf("%+d",-2:2), perl=T)
[1] "-2" "-1" "0"  "+1" "+2"

在正则表达式中,前瞻用于条件检查。 [+](?=0)只有符号+后才会匹配0。将匹配的+替换为空字符串会将+0变为0