Saltar al contenido

¿Qué significa el punto en R – preferencia personal, convención de nomenclatura o más?

Te recomendamos que revises esta respuesta en un entorno controlado antes de pasarlo a producción, un saludo.

Solución:

Un punto en el nombre de la función puede significar cualquiera de los siguientes:

  • nada en absoluto
  • un separador entre método y clase en métodos S3
  • para ocultar el nombre de la función

Posibles significados

1. Nada en absoluto

El punto en data.frame no se separa data desde frame, que no sea visualmente.

2. Separación de métodos y clases en métodos S3

plot es un ejemplo de un método S3 genérico. Por lo tanto plot.lm y plot.glm son las definiciones de funciones subyacentes que se utilizan al llamar plot(lm(...)) o plot(glm(...))

3. Ocultar funciones internas

Al escribir paquetes, a veces es útil usar puntos iniciales en los nombres de las funciones porque estas funciones están algo ocultas a la vista general. Las funciones que están destinadas a ser puramente internas de un paquete a veces usan esto.

En este contexto, “algo oculto” simplemente significa que la variable (o función) normalmente no aparecerá cuando enumere el objeto con ls(). Para forzar ls para mostrar estas variables, use ls(all.names=TRUE). Al usar un punto como primera letra de una variable, cambia el alcance de la propia variable. Por ejemplo:

x <- 3
.x <- 4

ls()
[1] "x"

ls(all.names=TRUE)
[1] ".x" "x" 

x
[1] 3
.x
[1] 4

4. Otras posibles razones

En el paquete plyr de Hadley, usa la convención para usar puntos iniciales en los nombres de las funciones. Esto es un mecanismo para intentar garantizar que al resolver nombres de variables, los valores se resuelvan en las variables de usuario en lugar de en las variables de función interna.


Complicaciones

Esta mezcolanza de diferentes usos puede llevar a situaciones muy confusas, porque estos diferentes usos pueden mixed en el mismo nombre de función.

Por ejemplo, para convertir un data.frame a una lista que usas as.list(..)

as.list(iris)

En este caso as.list es un método genérico de S3 y está pasando un data.frame lo. Por lo tanto, la función S3 se llama as.list.data.frame:

> as.list.data.frame
function (x, ...) 

    x <- unclass(x)
    attr(x, "row.names") <- NULL
    x


Y para algo realmente espectacular, cargue el data.table paquete y mira la función as.data.table.data.frame:

> library(data.table)

> methods(as.data.table)
[1] as.data.table.data.frame* as.data.table.data.table* as.data.table.matrix*    

   Non-visible functions are asterisked


> data.table:::as.data.table.data.frame
function (x, keep.rownames = FALSE) 

    if (keep.rownames) 
        return(data.table(rn = rownames(x), x, keep.rownames = FALSE))
    attr(x, "row.names") = .set_row_names(nrow(x))
    class(x) = c("data.table", "data.frame")
    x


Al comienzo de un nombre, funciona como la convención de nombre de archivo de UNIX para mantener los objetos ocultos de forma predeterminada.

ls()
character(0)

.a <- 1

ls()
character(0)

ls(all.names = TRUE)
[1] ".a"

Puede ser solo un token sin un significado especial, no hace nada más que cualquier otro token permitido.

my.var <- 1
my_var <- 1
myVar <- 1

Se utiliza para el envío del método S3. Entonces, si defino la clase simple "myClass" y creo objetos con esa clase attribute, entonces las funciones genéricas como print () se enviarán automáticamente a mi método de impresión específico.

myvar <- 1

print(myvar)

class(myvar) <- c("myClass", class(myvar))

print.myClass <- function(x, ...) 

    print(paste("a special message for myClass objects, this one has length", length(x)))
    return(invisible(NULL))


print(myvar)

Existe una ambigüedad en la sintaxis de S3, ya que no se puede saber a partir del nombre de una función si es un método de S3 o simplemente un punto en el nombre. Pero es un mecanismo muy simple que es muy poderoso.

Hay mucho más en cada uno de estos tres aspectos, y no debería tomar mis ejemplos como una buena práctica, pero son las diferencias básicas.

Si haces scroll puedes encontrar las crónicas de otros sys admins, tú incluso puedes dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *