很抱歉有一种新问题,因为我多年来一直在使用R,但是在学生向我指出并且无法解释之前我没有注意到这种行为。首先,构建一个小数据框架。大于100的x值应该是非法的,但有些人在这里偷偷摸摸。我们还有一个“组”自变量。:
x = c(20, 30, 50, 60, 150, 35, 55, 75, 45, 145)
g = c(1,1,1,1,1,2,2,2,2,2)
df = data.frame(cbind(x,g))
现在,分组和未分组的箱形图显示所有数据,包括非法值,如下所示:
boxplot(x~g)
boxplot(x)
因此,我们希望通过仅选择x值小于100的帧中的那些行来删除非法值。分组版本完全按预期工作:
boxplot(x~g, data=df[x < 100,])
但未分组的人不会!绘制所有数据,包括超过100的值。为什么前一个工作而这个不工作?
boxplot(x, data=df[x < 100,])
我确定我错过了一些简单的东西,但对于我的生活,我无法弄清楚它是什么,我无法通过Google找到答案或在此搜索。
答案 0 :(得分:2)
boxplot
是一个S3泛型,这意味着根据第一个参数的不同,实际上会调用完全不同的函数。 boxplot.formula
与boxplot.default
的论点不同。具体来说,boxplot.default
根本没有数据参数;它可能被吸入...
,然后被忽略为未知的图形参数。
请尝试boxplot(x[x < 100])
。
答案 1 :(得分:0)
原因是因为boxplot
正在从全局环境中读取x
,而不是数据框。
请注意,这不起作用:
df1 = df[x < 100, ]
boxplot(x, data=df1)
然而,这有效:
boxplot(df[df$x < 100, 'x'])