matrices listas leer funcion filas eliminar data crear contar r dataframe operators exponentiation

listas - ¿Por qué "^" en un data.frame devuelve una matriz en lugar de un data.frame como "*"?



listas en r (1)

Esta pregunta está motivada por un error presentado aquí por Abiel Reinhart en data.table . Noté que lo mismo sucede en data.frame también.

Aquí hay un ejemplo:

DF <- data.frame(x=1:5, y=6:10) > DF*DF x y 1 1 36 2 4 49 3 9 64 4 16 81 5 25 100 > class(DF*DF) # [1] "data.frame" > DF^2 x y [1,] 1 36 [2,] 4 49 [3,] 9 64 [4,] 16 81 [5,] 25 100 > class(DF^2) # [1] "matrix"

¿Por qué "^" lo coacciona en una matriz? ¿Algunas ideas? Tenga en cuenta que ** se convierte en ^ por el analizador. Entonces, hacer DF**2 daría el mismo resultado que DF^2 .

No encuentro nada relacionado con esta coacción en ?`^` .

Editar: La respuesta de Neal muestra claramente el motivo por el cual se devuelve una matrix cuando se opera en un data.frame . Sería genial si la pregunta sobre por qué ^ se deja fuera en ese fragmento de código pudiera ser respondida también.

Editar 2: también publiqué aquí en R-help y obtuve una respuesta de Duncan que parece que no hay información reg. este cambio en las NOTICIAS (es cierto, es un cambio bastante antiguo como también lo señalaron Joshua y Duncan).


Ops.data.frame implementa los operadores matemáticos para marcos de datos como genéricos S3, estas son las últimas líneas:

if (.Generic %in% c("+", "-", "*", "/", "%%", "%/%")) { names(value) <- cn data.frame(value, row.names = rn, check.names = FALSE, check.rows = FALSE) } else matrix(unlist(value, recursive = FALSE, use.names = FALSE), nrow = nr, dimnames = list(rn, cn))

Entonces ^ se devuelve como una matriz.