当简单的算术运算被作为x传递时,函数formatC()产生错误的数字格式.

例如:

formatC(29, width = 3, format = "d", flag = "0")
> "029"

这是正确的.但当我这样做:

formatC(100*0.29, width = 3, format = "d", flag = "0")
> "028"

我在这里错过了什么?(R版本4.3.2(2023-10-31 ucrt))

推荐答案

您正在使用format = "d".docs列出了format参数的各种选项:

等于"d"(对于整数)、"f""e""E""g""G""fg"(对于实数)或"s"(对于字符串).对于整数,默认为"d",对于实数,默认为"g".

无论是29还是0.29 * 100都不会被R存储为整数,并且它们不相等.你可以在这里看到这个:

class(29) # numeric
class(29L) # integer
sprintf("%.20f", 29)
# [1] "29.00000000000000000000"
sprintf("%.20f", 100 * 0.29)
# [1] "28.99999999999999644729"

使用整数格式会将第二个值截断为28.对REAL使用适当的格式,例如:

formatC(100 * 0.29, width = 3, format = "g", flag = "0")
# [1] "029"

有关发生这种情况的更多原因,请参阅:Why are these numbers not equal?

R相关问答推荐

在ComplexHeatmap中,如何更改anno_barplot()标题的Angular ?

selectInput不返回ALL,并将因子转换为shiny 的数字

将向量组合到一个数据集中,并相应地命名行

当我们有多个特殊字符时,使用gsub删除名称和代码'

在ggplot2中更改小提琴情节的顺序

如何在R中改变fviz_pca_biplot中圆的边界线的 colored颜色 ?

观察器中的inaliateLater的位置

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

层次树图的数据树

为R中的16组参数生成10000个样本的有效方法是什么?

如何在使用因子时获得Sankey图的Scale_Fill_Viridis的全范围

R仅当存在列时才发生变异

如何调整一个facet_work()面板内的框图和移动标签之间的水平宽度?

如何将EC50值绘制在R中的剂量-react 曲线上?

整理ggmosaic图的标签

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

禁用时,SelecizeInput将变得不透明

对一个数据帧中另一个数据帧中的值进行计数

如何在一个GGPLATE中绘制多个灰度平滑?

只有当我在循环的末尾放置一条print语句时,Foreach才会给出预期的输出