Qual è il significato di "." (Punto) in R?


39

Sto solo leggendo il libro "R in a Nutshell". E sembra che ho saltato la parte in cui il "." come in "sample.formula" è stato spiegato.

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

Campionare un oggetto con una formula di campo come in altre lingue? E se è così, come posso scoprire, quali altri campi / funzioni ha questo oggetto? (Dichiarazione del tipo)

EDIT: ho appena trovato un altro uso confuso del ".":

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

(il punto tra ~.,)


y=β0

12
.spambase.trainingis_spamy=β0y ~ 1

Non ho controllato le fonti in anticipo. Grazie per la correzione!
Christopher Aden,

@caracal (+1) Wow Mi stavo solo chiedendo come farlo. Grazie!
Thomas Levine,

Risposte:


30

Il punto può essere usato come nel nome normale. Ha comunque un'interpretazione speciale aggiuntiva. Supponiamo di avere un oggetto con una classe specifica:

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

Ora dichiarare myfunctioncome standard generico nel modo seguente:

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

Ora dichiara la funzione

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

Quindi il punto ha un significato speciale. Per tutti gli oggetti con classe myclasschiamata

 myfunction(a)

chiamerà effettivamente la funzione myfunction.myclass:

 > myfunction(a)
  [1] 2

Questo è ampiamente usato in R, l'esempio più appropriato è la funzione summary. Ogni classe ha una sua summaryfunzione, quindi quando ad esempio si adatta un modello (che di solito restituisce un oggetto con una classe specifica), è necessario invocare summarye chiamerà la funzione di riepilogo appropriata per quel modello specifico.


Sono molto sorpreso che questa risposta sia stata accettata e votata così tanto, perché non risponde affatto alla domanda! Si riferisce al ellissi ... (che è un singolo lessema, non una sequenza di tre diverse) come "punto", mentre la domanda significa chiaramente un puntino . come usato nelle formule e nomi in un modo completamente diverso, come descritto correttamente in una contemporanea risposta di Chase.
whuber

3
Beh, non mi riferisco ai puntini di sospensione. Ho provato a spiegare che il punto è usato per l'invio del metodo S3. Le funzioni generiche di solito hanno delle ellissi, ecco perché le ho usate. Se vengono rimossi dal codice, la risposta non cambierebbe. Posso solo supporre di aver dato la risposta prima della modifica, dato che ora darei una risposta diversa dopo aver riletto il corpo della domanda.
mpiktas,

1
Grazie per la spiegazione. Penso che la comparsa di "..." due volte mi abbia indotto a credere che ti stavi riferendo ad esso come un "punto".
whuber

12

Guarda la pagina di aiuto per ?formulaquanto riguarda .Ecco i bit rilevanti:

Ci sono due interpretazioni speciali di. in una formula. Il solito è nel contesto di un argomento di dati delle funzioni di adattamento del modello e significa "tutte le colonne non altrimenti nella formula": vedere terms.formula. Solo nel contesto di update.formula, significa "ciò che era precedentemente in questa parte della formula".

In alternativa, i pacchetti reshapee reshape2usano .e ...un po 'diversamente (da ?cast):

Esistono un paio di variabili speciali: "..." rappresenta tutte le altre variabili non utilizzate nella formula e "." non rappresenta alcuna variabile


5

Ci sono alcune eccezioni (invio del metodo S3), ma generalmente viene semplicemente utilizzato come ausilio per la leggibilità e come tale non ha alcun significato speciale.


2
Direi il contrario: ha un significato speciale (la spedizione S3 che menzioni), ma alcune vecchie convenzioni di denominazione hanno fatto sì che i nomi delle funzioni che non sono generici S3 abbiano nomi che includano a .. Ciò riguarda i nomi delle funzioni. Per quanto riguarda i nomi di oggetti (non funzionali), quindi sì, non esiste un significato speciale.
Ripristina Monica - G. Simpson,

All'inizio di un nome, a .rende l'oggetto invisibile ls().
Caracal,

2

Il punto in sample.formula non separa il campione dalla formula , se non visivamente. È solo un nome variabile. I nomi delle variabili R possono essere costituiti da caratteri alfanumerici e punto (.) E carattere di sottolineatura (_) con un'eccezione. Ecco la regola attuale:

" Un nome sintatticamente valido è composto da lettere, numeri e il punto o il carattere di sottolineatura e inizia con una lettera o il punto non seguito da un numero. Nomi come" .2way "non sono validi, né lo sono le parole riservate. "

Il secondo caso (ovvero il caso di is_spam ~. ) È diverso ed è spiegato sopra.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.