¿Cuál es el significado del "." (Punto) en R?

39

Solo estoy leyendo el libro "R in a Nutshell". Y parece como si me saltara la parte donde el "." como en "sample.formula" se explicó.

> sample.formula <- as.formula(y~x1+x2)

¿Es la muestra un objeto con una fórmula de campo como en otros idiomas? Y si es así, ¿cómo puedo averiguar qué otros campos / funciones tiene este objeto? (Declaración de tipo)

EDITAR: Acabo de encontrar otro uso confuso del ".":

> svm(formula = is_spam~., data = spambase.training)

(el punto entre ~.,)

fabianista
fuente
El punto que ves con el is_spam ~. comando significa que no hay variables explicativas. Por lo general, con las fórmulas del modelo, verá y ~ x, pero si no tiene una variable x, y ~. dice que adivine el valor de y sin usar otras variables. Esto es lo mismo que el modeloy=β0 0
Christopher Aden
12
@ Christopher Por el contrario, .en la fórmula le dice a R que use todas las variables en el marco de datos spambase.training(excepto is_spam) como predictores. El modelo se ajusta con . y=β0 0y ~ 1
Caracal
No revisé las fuentes de antemano. ¡Gracias por la corrección!
Christopher Aden
@caracal (+1) Wow, me preguntaba cómo hacer esto. ¡Gracias!
Thomas Levine

Respuestas:

30

El punto se puede usar como en el nombre normal. Sin embargo, tiene una interpretación especial adicional. Supongamos que tenemos un objeto con clase específica:

 a <- list(b=1)
 class(a) <- "myclass"

Ahora declare myfunctioncomo genérico estándar de la siguiente manera:

 myfunction <- function(x,...) UseMethod("myfunction")

Ahora declara la función

 myfunction.myclass <- function(x,...) x$b+1

Entonces el punto tiene un significado especial. Para todos los objetos con myclassllamadas de clase

 myfunction(a)

llamará realmente a la función myfunction.myclass:

 > myfunction(a)
  [1] 2

Esto se usa ampliamente en R, el ejemplo más apropiado es la función summary. Cada clase tiene su propia summaryfunción, por lo que cuando se ajusta a algún modelo, por ejemplo (que generalmente devuelve un objeto con una clase específica), debe invocar summaryy llamará a la función de resumen apropiada para ese modelo específico.

mpiktas
fuente
¡Estoy muy sorprendido de que esta respuesta haya sido aceptada y votada tanto, porque no responde la pregunta en absoluto! Se refiere a los puntos suspensivos ... (que es un solo lexema, no una secuencia de tres diferentes) como un "punto", mientras que la pregunta claramente significa un punto . tal como se usa en fórmulas y nombres de una manera completamente diferente, como se describe correctamente de manera contemporánea. respuesta de Chase.
whuber
3
Bueno, no me refiero a los puntos suspensivos. Traté de explicar que el punto se usa para el envío del método S3. Las funciones genéricas generalmente tienen puntos suspensivos, por eso las utilicé. Si se eliminan del código, la respuesta no cambiaría. Solo puedo adivinar que di la respuesta antes de la edición, ya que daría una respuesta diferente ahora después de volver a leer el cuerpo de la pregunta.
mpiktas
1
Gracias por la explicación. Creo que la aparición de "..." dos veces me llevó a creer que te referías a él como un "punto".
whuber
12

Mira la página de ayuda ?formulacon respecto a .Aquí están los bits relevantes:

Hay dos interpretaciones especiales de. en una formula La habitual es en el contexto de un argumento de datos de funciones de ajuste del modelo y significa 'todas las columnas que no están en la fórmula': ver terms.formula. En el contexto de update.formula, solo significa 'lo que anteriormente estaba en esta parte de la fórmula'.

Alternativamente, los paquetes reshapey reshape2usan .y ...un poco diferente (de ?cast):

Hay un par de variables especiales: "..." representa todas las demás variables no utilizadas en la fórmula y "." no representa ninguna variable

Persecución
fuente
5

Hay algunas excepciones (envío del método S3), pero generalmente se usa simplemente como ayuda de legibilidad y, como tal, no tiene un significado especial.

Nick Sabbe
fuente
2
Yo diría lo contrario: tiene un significado especial (el despacho S3 que mencionas), pero algunas convenciones de nomenclatura antiguas hicieron que los nombres de funciones que no son genéricos S3 tengan nombres que incluyen a .. Eso pertenece a los nombres de las funciones. En cuanto a los nombres de objetos (no funcionales), entonces sí, no hay un significado especial.
Restablece a Monica - G. Simpson
Sin embargo, al comienzo de un nombre, a .hace que el objeto sea invisible ls().
Caracal
2

El punto en sample.formula no separa la muestra de la fórmula , excepto visualmente. Es solo un nombre variable. Los nombres de las variables R pueden consistir en alfanuméricos y punto (.) Y guión bajo (_) con una excepción. Aquí está la regla real:

" Un nombre sintácticamente válido consiste en letras, números y los caracteres de punto o subrayado y comienza con una letra o el punto que no va seguido de un número. Los nombres como" .2way "no son válidos, y tampoco lo son las palabras reservadas " .

El segundo caso (es decir, el caso de is_spam ~. ) Es diferente y se explica más arriba.

M. Naci Akkök
fuente