使用sprintf
时,"%+d"
会使用sign:
sprintf("%+d",-2:2)
[1] "-2" "-1" "+0" "+1" "+2"
是否有sprintf
的参数自动转义0并获得以下内容?
[1] "-2" "-1" "0" "+1" "+2"
答案 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