四舍五入R中的有效数字

四舍五入R中的有效数字,r,rounding,presentation,significant-digits,R,Rounding,Presentation,Significant Digits,所以基本上我在做一个物理实验,在我的表格里,我想把我的数据四舍五入到与误差相同的精度,四舍五入到1sig 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,

所以基本上我在做一个物理实验,在我的表格里,我想把我的数据四舍五入到与误差相同的精度,四舍五入到1sig 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)
}
当我实现它时,我得到了错误 'FUNX[[i]]中的错误,…:数学函数'

的非数值参数这可以通过signif完成。与四舍五入(四舍五入到小数位数)不同,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
对于您的案例,这意味着:

angle.error <- c(0.024, 0.3, 0.113)
cor <- signif(angle.error,1)
这会给你你想要的答案。

这可以通过signif完成。与四舍五入(四舍五入到小数位数)不同,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
对于您的案例,这意味着:

angle.error <- c(0.024, 0.3, 0.113)
cor <- signif(angle.error,1)

这应该会给你你想要的答案。

我可能需要一些澄清。您是否使用1dp表示1个有效数字或1个小数位。如果您没有将1dp与1SIG fig互换使用,那么您的输出似乎不太正确。另外,您说您希望将angle四舍五入到与angle.error相同数量的sigfigs,但您的输出使用两个sigfigs作为angle,而angle.error只有一个。是的,对不起,我弄错了-我现在编辑了它,以使唤醒可能需要一些澄清。您是否使用1dp表示1个有效数字或1个小数位。如果您没有将1dp与1SIG fig互换使用,那么您的输出似乎不太正确。另外,您说希望将angle四舍五入到与angle.error相同数量的sigfigs,但您的输出使用两个sigfigs作为angle,而angle.error只有一个sigfigs。是的,很抱歉,我弄错了-我现在已将其编辑为sense@NickSiemons,稍微更新了答案,这样它也描述了你的具体情况。谢谢你,我试了一下。理想情况下,我希望这是一个UDF,我已经尝试过这样做。不幸的是,当我实现它时,我遇到了一个错误——请参阅我文章中的编辑。有什么想法吗?好的!不得不添加exp@Nick Siemons,稍微更新了答案,这样它也描述了你的具体情况。谢谢你,我试了一下。理想情况下,我希望这是一个UDF,我已经尝试过这样做。不幸的是,当我实现它时,我遇到了一个错误——请参阅我文章中的编辑。有什么想法吗?好的!必须添加exp
angle <- c(4, 4.1, 4.2)
angle_cor <- round(angle, -exp)
sapply(seq_along(angle), function(i) format(angle[i], nsmall = -exp[i]))