虹膜之间的区别$ Sepal.Width& " Sepal.Width" in []

时间:2014-06-24 10:29:24

标签: r

subset(iris, Sepal.Width  > 4 & Sepal.Length > 5, select = c(Sepal.Width,Sepal.Length,Species))

我正在检查子集函数,但我认为同样的事情可以更容易实现,所以为什么要记住一个新函数。

所以我编写了下面的代码来复制上面的子集函数

1)

 iris["Sepal.Width" > 4 & "Sepal.Length" > 5,c("Sepal.Width", "Sepal.Length","Species")]

但&条件在这里不起作用,当我检查下面的代码并且它起作用

2)

 iris[iris$Sepal.Width > 4 & iris$Sepal.Length > 5,c("Sepal.Width", "Sepal.Length","Species")]

请解释

  • 代码1)& 2)是不同的我期望1)& 2)给予同样的 结果。
  • 既然我们有代码2)我们为什么要使用子集函数?任何
    子集函数更好的场景?

由于

1 个答案:

答案 0 :(得分:0)

这是因为您将字符串Sepal.Width与数字4进行比较,而不是将同一列的值进行比较。所以这些将永远是TRUE

> "Sepal.Width" > 4
[1] TRUE

> "Sepal.Length" > 5
[1] TRUE

所以你是iris[TRUE, c("Sepal.Width", "Sepal.Length","Species")],它返回所选列的所有行。我个人更喜欢使用subset