Попробуйте следующее:
SUB=ESet[, ESet$x %in% c(0,1)]
На первый взгляд разница между ==
и %in%
кажется лишь незначительной.
x <- 0:9
x[x==c(0, 1)]
[1] 0 1
> x[x %in% c(0, 1)]
[1] 0 1
Но %in%
никогда не вернетсяNA
, и это может быть полезным или даже необходимым, в зависимости от того, что вы хотите сделать.В следующем построенном примере ==
возвращает NA
, тогда как %in%
возвращает ожидаемый результат:
x <- c(NA, 0:9)
x[x==c(0, 1)]
[1] NA
x[x %in% c(0, 1)]
[1] 0 1
Но разница намного глубже, чем эта.Из файлов справки для? ==
видно, что при выполнении двоичных сравнений между векторами неравной длины элементы более коротких векторов при необходимости перерабатываются.
Попробуйте, например, следующее:
x <- 0:9
x[x==c(1, 2)]
integer(0)
В результате получается пустой вектор.Если вы перезапустите вектор c (1, 2), сразу станет понятно, почему:
x: 0 1 2 3 4 5 6 7 8 9
c(1, 2): 1 2 1 2 1 2 1 2 1 2
'==': F F F F F F F F F F