双变量未按预期打印
问题: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`参数的方法。此外,还可以定义一个通用的函数来处理数字向量。另外,要注意一些替代方法可能会导致意外的结果,例如显示负零。
在上述代码中,使用了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中打印输出数值时精度丢失的问题的方法,同时还保持了数值的原始数据类型,使得可以进行更多的计算。