我有一个名为SET1Bearing1slope的列表,其中包含9个数字,每个数字至少有10个小数位。当我在列表中使用mean()函数时,我得到一个算术平均值
。
然而,如果我单独列出数字然后使用mean()函数,我会得到不同的输出
我知道这是由四舍五入引起的,第二种方法更准确。有没有办法避免这个问题?在计算平均值时,我可以使用什么方法来避免舍入误差?
答案 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