陷入逻辑索引和R中的"哪个"

dwh*_*dwh 5 indexing r which

在R中是否存在使用"哪个"索引不能与R中的逻辑索引混合的情况?我似乎记得几个月前碰到了这两个问题 - R的味道保留了一些行号的内部概念,这与我在其他地方使用逻辑索引后使用"which"的效果不佳删掉一些行.

这是一个众所周知的现象,还是我梦想了整个事情?

nul*_*lob 10

请注意,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
Run Code Online (Sandbox Code Playgroud)


mds*_*ner 6

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

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

x <- 1:10
x > 5
[1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
Run Code Online (Sandbox Code Playgroud)

这是一个10元素的逻辑向量,但which()等价的长度为5:

其中(x> 5)[1] 6 7 8 9 10

关于不能混合这些东西并没有什么复杂的,他们只是不去一起.第一个隐含地丢弃前五个元素,并通过数据和逻辑向量之间的位置匹配来保留最后五个元素

x[x > 5]
Run Code Online (Sandbox Code Playgroud)

第二个是明确只选择最后五个元素

x[which(x > 5)]
Run Code Online (Sandbox Code Playgroud)

同样的结果,但"["运算符的参数在每种情况下都是完全不同的.无论所选元素是向量中的单个值还是a中的行,这都适用data.frame.