R奇怪的数据框子集公式与无公式

时间:2016-10-10 19:52:44

标签: r dataframe

很抱歉有一种新问题,因为我多年来一直在使用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找到答案或在此搜索。

2 个答案:

答案 0 :(得分:2)

boxplot是一个S3泛型,这意味着根据第一个参数的不同,实际上会调用完全不同的函数。 boxplot.formulaboxplot.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'])