【发布时间】:2018-04-25 01:05:56
【问题描述】:
Unique 查找向量的唯一值。
如果我有一个数据框:
test_data <- data.frame(x = c(rep(1.00050239485720394857,4),
1.00050239485720394854,rep(2.0002230948570293845,5),rep(3.0005903847502398475,5)),
y = c(rep(4.00423409872345,5),rep(2.034532039485722,5),rep(1.1234152304957,5)))
sapply(test_data,unique)
R 返回:
x y
[1,] 1.000502 4.004234
[2,] 2.000223 2.034532
[3,] 3.000590 1.123415
正如预期的那样。
但是假设我拟合了一个 lm() 或 aov() 对象,然后尝试找到唯一的拟合值():
set.seed(123)
y = rf(100,50,3,3)
x1 <- factor(c(rep("blue",25),
rep("green",25),
rep("orange",25),
rep("purple",25)))
bsFit <- aov(y ~ x1)
unique(bsFit$fitted.values)
R 返回:
[1] 2.709076 2.709076 2.709076 2.709076 2.709076 2.709076
[7] 2.709076 4.060080 4.060080 4.060080 4.060080 3.314801
[13] 3.314801 3.314801 3.314801 1.960280 1.960280 1.960280
[19] 1.960280 1.960280
这里明显有重复。
【问题讨论】:
-
浮点运算在 R 或大多数其他语言中并不精确。我的猜测是,似乎出现了 7 次的“重复”值
2.709076实际上与引擎盖下的值不同。 -
R 只显示句号右侧的 6 位数字。
-
我相信我已经更新了我的问题以反映您的 cmets @TimBiegeleisen
-
@JeromeDineen 可能在圆括号中放错了括号?
-
unique(round(bsFit$fitted.values,6))成功了