在R中计算平均值时丢失小数位数

时间:2018-06-14 15:55:45

标签: r

我有一个名为SET1Bearing1slope的列表,其中包含9个数字,每个数字至少有10个小数位。当我在列表中使用mean()函数时,我得到一个算术平均值

Calculated arithmetic mean

然而,如果我单独列出数字然后使用mean()函数,我会得到不同的输出

Different calculated arithmetic mean

我知道这是由四舍五入引起的,第二种方法更准确。有没有办法避免这个问题?在计算平均值时,我可以使用什么方法来避免舍入误差?

2 个答案:

答案 0 :(得分:5)

在R中,mean()需要一个值向量,而不是多个值。它也是一个通用函数,因此它可以容忍它不理解的其他参数(但不会对它们发出警告)。参见

mean(c(1,5,6))
# [1] 4
mean(1, 5, 6) #only "1" is used here, 5 and 6 are ignored.
# [1] 1

因此在您的示例中没有舍入错误,您只是错误地调用该函数。

答案 1 :(得分:1)

查看您调用该函数的方式的不同之处:

mean(c(1,2,5))
[1] 2.666667

mean(1,2,5)
[1] 1

正如MrFlick指出的那样,在第一种情况下,你传递了一个数字向量(正确的方式);在第二个中,你传递一个参数列表,只考虑第一个参数。

至于位数,您可以使用options()指定它:

options(digits = 10)

x <- runif(10)

x
[1] 0.49957540398 0.71266139182 0.07266473584 0.90541790240 0.41799820261
[6] 0.59809536533 0.88133668737 0.17078919476 0.92475634208 0.48827998806

mean(x)
[1] 0.5671575214

但请记住,更多的数字不一定更好。 R和其他人限制数字os数字的原因。请查看此主题:https://en.wikipedia.org/wiki/Significance_arithmetic