Вы также можете воспользоваться тем фактом, что равенство означает, что стандартное отклонение всегда будет равно 0. К сожалению, мы должны преобразовать эти 0 в логические либо с помощью логического выражения (ниже), либо с помощью as.logical
.
x[apply(x, 1, sd) > 0, ]
Обновление
Сделал некоторые тесты @joran и моих решений. Шахта потеряна: (
x <- matrix(sample(3:5,30000,T), ncol=3)
system.time(x2 <- x[apply(x,1,sd) > 0, ])
user system elapsed
0.960 0.000 0.961
system.time(x2 <- x[apply(x,1,FUN=function(r){return(length(unique(r)))}) > 1,])
user system elapsed
0.470 0.000 0.465
Но ...
Если мы сделаем полностью векторизованную версию с похожей темой, мы сможем взорвать оба из воды
system.time(x2 <- x[rowSums(abs(x - rowMeans(x))) != 0, ])
user system elapsed
0.000 0.000 0.001