Bra*_*sen 238 formatting r rounding r-faq
我有一个数字,例如1.128347132904321674821,我想在输出到屏幕(或写入文件)时只显示两位小数.怎么做到这一点?
x <- 1.128347132904321674821
Run Code Online (Sandbox Code Playgroud)
编辑:
指某东西的用途:
options(digits=2)
Run Code Online (Sandbox Code Playgroud)
已被建议作为可能的答案.有没有办法在脚本中指定一次性使用?当我将它添加到我的脚本时,它似乎没有做任何不同的事情,我对很多重新键入格式化每个数字感兴趣(我正在自动化一个非常大的报告).
-
答案:round(x,digits = 2)
Jer*_*lim 352
背景:本网页上提出了一些答案(例如signif,options(digits=...)),不保证显示为任意数量的小数一定数量.我认为这是R中的一个设计特征,其中良好的科学实践涉及根据" 重要数字 "的原则显示一定数量的数字.但是,在许多域(例如,APA样式,业务报告)中,格式要求规定显示一定数量的小数位.这通常是为了一致性和标准化目的而不是关注重要数据.
方案:
以下代码显示该数字的正好两位小数x.
format(round(x, 2), nsmall = 2)
Run Code Online (Sandbox Code Playgroud)
例如:
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"
Run Code Online (Sandbox Code Playgroud)
更一般的功能如下,其中x是数字,k是要显示的小数位数.trimws删除任何前导空白区域,如果您有一个数字向量,这可能很有用.
specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))
Run Code Online (Sandbox Code Playgroud)
例如,
specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"
Run Code Online (Sandbox Code Playgroud)
SOR*_*JON 30
您可以根据需要格式化数字,例如x,最多小数位数.这x是一个带有许多小数位的数字.假设我们希望显示此数字的最多8个小数位:
x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"
Run Code Online (Sandbox Code Playgroud)
这里format="f"给出了通常的小数位,例如xxx.xxx中的浮点数,并digits指定了位数.相比之下,如果你想得到一个整数来显示你会使用format="d"(很像sprintf).
Kun*_*Ren 22
您可以尝试我的包格式表.
> # devtools::install_github("renkun-ken/formattable")
> library(formattable)
> x <- formattable(1.128347132904321674821, digits = 2, format = "f")
> x
[1] 1.13
Run Code Online (Sandbox Code Playgroud)
好处是,x仍然是一个数字向量,您可以使用相同的格式进行更多的计算.
> x + 1
[1] 2.13
Run Code Online (Sandbox Code Playgroud)
更好的是,数字不会丢失,您可以随时重新格式化更多数字:)
> formattable(x, digits = 6, format = "f")
[1] 1.128347
Run Code Online (Sandbox Code Playgroud)
Mar*_*son 17
假设您要保留尾随零,则为2位小数
sprintf(5.5, fmt = '%#.2f')
Run Code Online (Sandbox Code Playgroud)
这使
[1] "5.50"
Run Code Online (Sandbox Code Playgroud)
正如下面@mpag提到,似乎ř有时可以得到意想不到的值与此和圆方法例如sprintf的(5.5550,FMT ="%#.2F")给出了5.55,而不是5.56
像这样:
options(digits=2)
Run Code Online (Sandbox Code Playgroud)
数字定义选项:
digits: controls the number of digits to print when printing numeric values.
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢有效数字而不是固定数字,那么signif命令可能会有用:
> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300
Run Code Online (Sandbox Code Playgroud)