在 R 中的数字序列中查找 "which number is not"
Finding "which number is not" in a numeric sequence in R
当试图从序列中排除特定数字时,我注意到 which(!(0:10 %in% 2:3))
returns 与 setdiff(0:10,2:3)
或 [=14] 不同的结果(删除 3 和 4 并添加 11) =].
which(!(1:10 %in% 2:3))
[1] 1 4 5 6 7 8 9 10
which(!(0:10 %in% 2:3))
[1] 1 2 5 6 7 8 9 10 11
setdiff(0:10,2:3)
[1] 0 1 4 5 6 7 8 9 10
这似乎是一个简单的逻辑问题,但我想不通这是因为什么?对于大序列,setdiff
和 which(!())
一样快吗?
总结评论,which
给出了元素的位置,而不是元素本身,上面的例子不清楚,但这些例子很明显:
which(!(10:20 %in% 12:13))
[1] 1 2 5 6 7 8 9 10 11
0:10 %in% 2:3
[1] FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
所以选择元素的正确方法是:
myseq<-0:10
myseq[which(!(0:10 %in% 2:3))]
关于速度,直接从vector中选取元素会稍微快一些:
myseq<-0:1000000
> microbenchmark::microbenchmark(
+ wh=myseq[which(!(0:1000000 %in% 2:3))],
+ sd=setdiff(0:1000000,2:3),
+ seq=(0:1000000)[!0:1000000 %in% 2:3]
+ )
Unit: milliseconds
expr min lq mean median uq max neval cld
wh 18.62157 18.85489 25.17644 25.37830 26.89162 152.9487 100 a
sd 36.09655 42.83383 50.22088 44.16595 45.96227 178.2949 100 b
seq 17.51332 17.98346 25.00993 24.39265 25.91137 174.1875 100 a
当试图从序列中排除特定数字时,我注意到 which(!(0:10 %in% 2:3))
returns 与 setdiff(0:10,2:3)
或 [=14] 不同的结果(删除 3 和 4 并添加 11) =].
which(!(1:10 %in% 2:3))
[1] 1 4 5 6 7 8 9 10
which(!(0:10 %in% 2:3))
[1] 1 2 5 6 7 8 9 10 11
setdiff(0:10,2:3)
[1] 0 1 4 5 6 7 8 9 10
这似乎是一个简单的逻辑问题,但我想不通这是因为什么?对于大序列,setdiff
和 which(!())
一样快吗?
总结评论,which
给出了元素的位置,而不是元素本身,上面的例子不清楚,但这些例子很明显:
which(!(10:20 %in% 12:13))
[1] 1 2 5 6 7 8 9 10 11
0:10 %in% 2:3
[1] FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
所以选择元素的正确方法是:
myseq<-0:10
myseq[which(!(0:10 %in% 2:3))]
关于速度,直接从vector中选取元素会稍微快一些:
myseq<-0:1000000
> microbenchmark::microbenchmark(
+ wh=myseq[which(!(0:1000000 %in% 2:3))],
+ sd=setdiff(0:1000000,2:3),
+ seq=(0:1000000)[!0:1000000 %in% 2:3]
+ )
Unit: milliseconds
expr min lq mean median uq max neval cld
wh 18.62157 18.85489 25.17644 25.37830 26.89162 152.9487 100 a
sd 36.09655 42.83383 50.22088 44.16595 45.96227 178.2949 100 b
seq 17.51332 17.98346 25.00993 24.39265 25.91137 174.1875 100 a