rownames not name how first error duplicate data columns column colnames are and allowed r

not - how to add row and column names to a matrix in r



¿Por qué se prefiere `row.names` a los` rownames`? (1)

row.names() es una función genérica de S3, mientras que rownames() es una función no genérica de nivel inferior. rownames() es en efecto el método predeterminado para row.names() que se aplica a cualquier objeto en ausencia de un método más específico.

Si está operando en un marco de datos x , entonces es más eficiente usar row.names(x) porque hay un row.names() específico de row.names() para los marcos de datos. El método row.names() para marcos de datos simplemente extrae el atributo "row.names" que ya está almacenado en x . Por el contrario, debido a la definición de rownames() y las interrelaciones entre las funciones, rownames(x) tiene que extraer todos los nombres de dimensión de x , luego eliminar los nombres de las columnas, luego combinarlos con los names(x) y luego eliminar names(x) nuevo. Este proceso incluso implica una llamada a row.names(x) como un paso intermedio. Por lo general, todo esto sucederá tan rápido que no lo notará, pero simplemente extraer el atributo es obviamente más eficiente.

Si no desea molestarse en distinguir las dos funciones, sería lógico usar la versión genérica row.names() todo el tiempo, ya que siempre se distribuye el método apropiado. Por ejemplo, si x es una matriz, entonces row.names(x) simplemente pasa limpiamente a rownames(x) porque no hay un método más específico para esa clase de objeto.

Hay dos funciones en la biblioteca del núcleo de R.

  • row.names Obtener y establecer nombres de fila para marcos de datos
  • rownames Recupera o establece los nombres de las filas de un objeto similar a una matriz.

Sin embargo, los documentos para row.names especifican Para un marco de datos, ''rownames'' y ''colnames'' eventualmente llaman ''row.names'' y ''names'' respectivamente, pero se prefieren estos últimos. ¿Por qué se prefiere row.names ? ¿No sería más fácil simplemente ignorar row.names y simplemente llamar rownames ?