es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Construye manualmente el factor a partir de un vector de enteros.

Estoy tratando de entender cómo varios objetos en R están compuestos por vectores atómicos y genéricos.

Se puede construir un data.frame a partir de una list estableciendo manualmente los atributos names, row.names y class, ver aquí.

Me pregunto cómo podría funcionar esto para factores, que se representan internamente como vectores enteros. La solución que se me ocurrió es la siguiente:

R

f <- 1:3
class(f) <- "factor"
levels(f) <- c("low", "medium", "high")
Warning message:
In str.default(val) : 'object' does not have valid levels()

Pero por alguna razón, esto sigue luciendo diferente a un factor correctamente construido:

R

str(unclass(f))
int [1:3] 1 2 3
- attr(*, "levels")= chr [1:3] "low" "medium" "high"
str(unclass(factor(c("low", "medium", "high"))))
int [1:3] 2 3 1
- attr(*, "levels")= chr [1:3] "high" "low" "medium"

¿Me estoy perdiendo algo? (Sé que esto probablemente no debería usarse en código de producción, en cambio, es solo con fines educativos).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es posible construir un factor a partir de un vector estableciendo manualmente los atributos de clase y niveles. Sin embargo, este método puede generar advertencias y el factor resultante puede parecer diferente en comparación con un factor correctamente construido.

    En el ejemplo proporcionado, el vector f primero se le asigna la clase “factor” y luego se establece su atributo de niveles en “low”, “medium” y “high”. Sin embargo, se emite una advertencia que indica que el objeto no tiene niveles válidos. Cuando f se desclasa y se examina su estructura, aparece como un vector de enteros con un atributo de niveles.

    Comparando esto con un factor correctamente construido utilizando el vector de niveles “low”, “medium” y “high”, vemos que el vector de enteros resultante y el atributo de niveles tienen un orden diferente.

    En general, aunque establecer manualmente los atributos puede construir técnicamente un factor, puede que no sea confiable y no se debe utilizar en código de producción.

Comments are closed.