我试图在一个闪亮的应用中使用percent()
格式化程序来设置valuebox()
我正在设计......并且遇到了一些有趣的行为。
显然这有效:
library(formattable)
a <- 0.2
percent(a)
但是我需要抓住一个潜在的NA,所以尝试了这个:
ifelse(!is.na(a),percent(a),NA)
返回不受欢迎的a(即0.2而不是20%)!发生了什么事?一些额外的测试:
> ifelse(!is.na(a),percent(a),2)
[1] 0.2
> percent(a)
[1] 20.00%
> if(1==1) percent(a)
[1] 20.00%
> ifelse(1==1,percent(a),0)
[1] 0.2
> ifelse(1==1,eval(percent(a)),0)
[1] 0.2
> ifelse(1==1,parse(text = percent(a)),0)
expression(0.2)
> ifelse(1==1,eval(parse(text = percent(a))),0)
[1] 0.2
那是怎么回事?
完全透明:percent(NA)
确实返回NA
,所以我没有被卡住,只是好奇。
答案 0 :(得分:1)
把它带到ifelse之外:
percent(ifelse(!is.na(a),a,NA))
[1] 20.00%
由于NA以NA的形式返回,因此您可以为NA执行此操作:
percent(ifelse(!is.na(NA),a,NA))
[1] NA
它也适用于带NA和数字的矢量:
percent(ifelse(!is.na(c(0.2,NA)),a,NA))
[1] 20.00% NA
这也发生在具有时间格式的ifelse
中,而且总是试图把它放在外面