formattable :: percent不能在ifelse中工作吗?

时间:2017-01-13 15:33:31

标签: r

我试图在一个闪亮的应用中使用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,所以我没有被卡住,只是好奇。

1 个答案:

答案 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中,而且总是试图把它放在外面