@rawr responde como códigolength(unique(vec1)) == 1
GWD
Respuestas:
12
Una opción es diff.
diff(vec1)
Si los elementos son iguales, su diferencia es cero.
all(diff(vec1)==0)#[1] TRUE
O compare el vector con su primer elemento.
all(vec1 == vec1[1])#[1] TRUE
Editar.
Se publicaron varias formas de determinar si todos los elementos de un vector son iguales, ver RHertel , Yuriy Saraykin , tmfmnk . Aquí hay pruebas comparativas.
library(microbenchmark)
library(ggplot2)
f <-function(n){
x <- rep(10, n)
mb <- microbenchmark(
var = var(x)==0,
sd = sd(x)==0,
diff = all(diff(x)==0),
extract = all(x == x[1]),
unique = length(unique(x))==1)
mb
}
sizes <- c(10,100, seq(1e3,1e4, by =1e3))
mb_list <- lapply(sizes, f)
names(mb_list)<- sizes
res <- lapply(seq_along(mb_list),function(i){
agg <- aggregate(time ~ expr, mb_list[[i]], median)
agg$size <- sizes[i]
agg
})
res <- do.call(rbind, res)
ggplot(res, aes(size, time, colour = expr))+
geom_point()+
geom_line()
diff(vec1)
devuelve qué?unique
elementolength(unique(vec1)) == 1
Respuestas:
Una opción es
diff
.Si los elementos son iguales, su diferencia es cero.
O compare el vector con su primer elemento.
Editar.
Se publicaron varias formas de determinar si todos los elementos de un vector son iguales, ver RHertel , Yuriy Saraykin , tmfmnk . Aquí hay pruebas comparativas.
fuente
Usa la varianza. Si todos los elementos de un vector son iguales, la varianza es cero:
fuente
contar el número de valores únicos
fuente
Podemos usar
n_distinct
desdedplyr
fuente
Puede convertirlo en un factor y obtener los niveles que deberían ser solo 1 valor si son todos iguales.
fuente
También puede calcular la desviación estándar y evaluar si es cero:
O usando
table()
:O usando
rle()
:fuente