双变量未按预期打印

9 浏览
0 Comments

双变量未按预期打印

我有一个数字,例如1.128347132904321674821,我希望在输出到屏幕上(或写入文件时)只显示两位小数。如何做到这一点?

x <- 1.128347132904321674821

编辑:

有人建议使用:

options(digits=2)

作为可能的答案。是否有一种在脚本中指定这个选项的方法,以便只使用一次?当我将它添加到我的脚本中时,它似乎没有做任何不同的事情,而且我对于格式化每个数字都不感兴趣(我正在自动化一个非常大的报告)。

--

答案:round(x, digits=2)

0
0 Comments

问题:double型变量没有按预期打印出来。

出现原因:R中的一些答案(例如`signif`,`options(digits=...)`)不能保证在任意数字上显示特定数量的小数位数。我推测这是R中的一个设计特点,根据“有效数字”的原则,好的科学实践要求显示一定数量的数字。然而,在许多领域(例如APA风格,商业报告)中,格式要求要求显示一定数量的小数位数。这通常是为了保持一致性和标准化,而不是关注有效数字。

解决方法:下面的代码为数字`x`显示了两位小数。

format(round(x, 2), nsmall = 2)

例如:

format(round(1.20, 2), nsmall = 2)
# [1] "1.20"
format(round(1, 2), nsmall = 2)
# [1] "1.00"
format(round(1.1234, 2), nsmall = 2)
# [1] "1.12"

下面是一个更通用的函数,其中`x`是数字,`k`是要显示的小数位数。`trimws`函数可以删除任何前导空格,这在您需要处理一个数字向量时非常有用。

specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))

例如:

specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"

替代方法的讨论:`formatC`和`sprintf`的答案效果还不错。但是它们在某些情况下会显示负零,这可能是不希望的。例如:

formatC(c(-0.001), digits = 2, format = "f")
# [1] "-0.00"
sprintf(-0.001, fmt = '%#.2f')
# [1] "-0.00"

解决这个问题的一个可能方法是:

formatC(as.numeric(as.character(round(-.001, 2))), digits = 2, format = "f")
# [1] "0.00"

还有一个问题是,`format(round(0.9995, 2), nsmall = 2)`给出的结果是"1.00",而`substr(0.9995, 1, 3)`给出的结果是"0.99"。您可以使用`substr(number, 1, 2+desired_decimals)`解决这个问题。

在R中,要按照特定的小数位数打印double型变量,可以使用`format`函数以及向其传递`round`函数和`nsmall`参数的方法。此外,还可以定义一个通用的函数来处理数字向量。另外,要注意一些替代方法可能会导致意外的结果,例如显示负零。

0
0 Comments

在上述代码中,使用了R语言中的formattable包。在代码中,通过将数字1.128347132904321674821赋值给变量x,并使用digits参数设置小数位数为2,format参数设置格式为"f"。然后输出变量x的结果。

然而,输出结果并不是预期的1.13,而是[1] 1.13。原因是R在打印输出时会自动对数字进行四舍五入。

要解决这个问题,可以使用formattable函数对变量x进行重新格式化,将小数位数设置为6,format参数仍然设置为"f"。然后再次输出变量x的结果,可以得到期望的结果1.128347。

总结起来,出现这个问题的原因是R在打印输出时对数字进行了四舍五入,解决方法是使用formattable函数对变量进行重新格式化。

在上述代码中,使用了formattable包提供的函数和参数。formattable函数可以对数值进行格式化,并保持数值的原始数据类型。通过设置digits参数可以控制小数位数,通过设置format参数可以控制格式。

formattable包提供了一种解决在R中打印输出数值时精度丢失的问题的方法,同时还保持了数值的原始数据类型,使得可以进行更多的计算。

0
0 Comments

(double variable get not printed as expected)这个问题出现的原因是在使用formatC函数时,无法按照预期的方式打印出双精度变量。解决方法是使用format="f"参数来指定浮点数的小数位数。另外,需要注意的是formatC函数不受options(digits)参数的影响。

0