舍入 R 中的有效数字

标签 r rounding presentation significant-digits

所以基本上我正在做一个物理实验,在我的表格中,我希望我的数据四舍五入到与误差相同的精度,四舍五入为 1 sig fig。

例如,如果我有以下内容:

angle <- c(4, 4.1, 4.2)
angle.error <- c(0.024, 0.3, 0.113)
data <- data.frame(angle,angle.error)

想要我最终得到的是将角度误差四舍五入到 1 sig fig,并将角度四舍五入到相应的小数位数作为角度误差,以给出
angle <- c(4.00, 4.1, 4.2)
angle.error <- c(0.02,0.3,0.1)
data <- data.frame(angle, angle.error)

希望这是有道理的!!这是我们被教导呈现数据的标准方式,因此我很惊讶我发现找到正确的方式来做这件事是多么困难。任何贡献都会很棒!!

编辑:

如果我想把它变成一个 UDR,其中说数据在我的数据框的第 5 列和第 6 列中的错误,我写:
Conv2 <- function(x) {
x[6] <- signif(x[6],1)
exp <- floor(log10(x[6]))
man <- x[6]/10^exp         
x[5] <- round(x[5], -exp)   # Error associated with this line I think
sapply(seq_along(x[5]), function(i) format(x[i,5], nsmall=-exp[i]))

return(x)
}

当我实现它时,我收到错误
'FUN(X[[i]], ...) 中的错误:数学函数的非数字参数'

最佳答案

这可以通过 signif() 来完成.对比round() ,四舍五入到小数位数,signif()舍入到特定数量的重要位置。

x <- c(1,1.0001,0.00001)
round(x,1) # rounds to the specified number of decimal places
signif(x,1) # rounds to the specified number of significant digits

让我们将此应用于您的案例。请注意,signif 在两个参数上都进行了向量化。
> signif(c(1.111,2.222,3.333),c(1,2,3))
[1] 1.00 2.20 3.33

对于您的情况,这意味着以下内容:
angle.error <- c(0.024, 0.3, 0.113)
cor <- signif(angle.error,1)

圆角稍微困难一些。我们需要将角度四舍五入到与angle.error_corr 相同的小数位数。因此,我们将提取该数字的尾数和指数。
exp <- floor(log10(cor)) 
man <- cor/10^exp

现在可以使用指数来圆角。
angle <- c(4, 4.1, 4.2)
angle_cor <- round(angle, -exp)

然而,这并没有给出预期的结果,因为 R 显示了最精确的 double 数的位数并删除了尾随零。我们可以用格式的 nsmall 参数解决这个问题,不幸的是它没有向量化。
sapply(seq_along(angle), function(i) format(angle[i], nsmall = -exp[i]))

这应该给你你正在寻找的答案。

关于舍入 R 中的有效数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42959616/

相关文章:

r - 根据 “uniqueness” 要求选择向量

python - 如何对一个复数进行四舍五入?

floating-point - 将带符号的单精度 float 舍入到最接近的整数的有效方法是什么?

java - 带偏移量的 double 最接近的倍数 java

latex - 如何在 Beamer 中的特定幻灯片中隐藏页脚(或脚注)?

删除第 i+1 个重复项

r - 使用 cbind 将向量与向量列表绑定(bind)

r - 如何将 wilcox.test 应用于 R 中的整个数据帧?

css - Internet Explorer 演示文稿

latex - 在 LaTeX Beamer 中更改 block 的默认宽度