逻辑索引的Gotchas和R中的“which”

逻辑索引的Gotchas和R中的“which”,r,indexing,R,Indexing,在R中是否存在不能将其用于索引与R中的逻辑索引混合使用的情况?我似乎记得几个月前遇到了一个关于这两个问题的难题——有一种R的味道,它保持了一些行数的内部概念,在我在其他地方使用逻辑索引删除了一些行之后,它的使用并没有很好地发挥作用 这是一个已知的现象,还是我做了整个梦 返回索引号以从向量中选择元素,或从矩阵/数组或data.frame中选择切片,并且这些不能与逻辑向量混合 考虑此向量中所有大于5的数字的逻辑向量: x <- 1:10 x > 5 [1] FALSE FALSE FAL

在R中是否存在不能将其用于索引与R中的逻辑索引混合使用的情况?我似乎记得几个月前遇到了一个关于这两个问题的难题——有一种R的味道,它保持了一些行数的内部概念,在我在其他地方使用逻辑索引删除了一些行之后,它的使用并没有很好地发挥作用

这是一个已知的现象,还是我做了整个梦

返回索引号以从向量中选择元素,或从矩阵/数组或data.frame中选择切片,并且这些不能与逻辑向量混合

考虑此向量中所有大于5的数字的逻辑向量:

x <- 1:10
x > 5
[1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
第二个是明确地只选择最后五个元素

x[which(x > 5)]

相同的结果,但[运算符的参数在每种情况下都非常不同。这适用于所选元素是向量中的单例值还是data.frame中的行。

请注意,NA和其他此类条目可能会混淆情况。以下是@mdsumner的示例:

> x <- c(1:10,NA,NaN,Inf)
> x > 5
 [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE    NA    NA
[13]  TRUE
> x[x > 5]
[1]   6   7   8   9  10  NA  NA Inf
> x[which(x > 5)]
[1]   6   7   8   9  10 Inf

是的,但是,正如你所指出的,我不太明白。我意识到了这一点,并且非常确定这不是绊倒我的原因。不确定这是不是真的,但这确实很棘手。谢谢!你为什么要用它?很可能你不需要它。
> x <- c(1:10,NA,NaN,Inf)
> x > 5
 [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE    NA    NA
[13]  TRUE
> x[x > 5]
[1]   6   7   8   9  10  NA  NA Inf
> x[which(x > 5)]
[1]   6   7   8   9  10 Inf