tua confusione è del tutto comprensibile, poiché R mescola due convenzioni di utilizzo (1) .
come separatore di parole di uso generale (come in is.na()
, which.min()
, update.formula()
, data.frame()
...) e (2) .
come indicatore di un metodo S3, method.class
(ovvero foo.bar()
sarebbe il metodo "pippo" per oggetti con l'attributo di classe "barra"). Ciò rende particolarmente confuse le funzioni come summary.data.frame()
(vale a dire il metodo summary
per oggetti con classe data.frame
).
Come @thelatemail sottolinea sopra, vi sono alcune altre serie di funzioni che ripetono lo stesso prefisso per una varietà di differenti opzioni (come in read.table()
, read.delim()
, read.fwf()
...), ma questi sono del tutto convenzionale, non specificato ovunque nella definizione del linguaggio formale.
dotfuns <- apropos("[a-z]\\.[a-z]")
dotstart <- gsub("\\.[a-zA-Z]+","",dotfuns)
head(dotstart)
tt <- table(dotstart)
head(rev(sort(tt)),10)
## as is print Sys file summary dev format all sys
## 118 51 32 18 17 16 16 15 14 13
(Alcuni di questi sono effettivamente generici S3, altri no. Ad esempio, Sys.*()
, dev.*()
e file.*()
no.)
Storicamente _
è stato usato come un collegamento per l'operatore di assegnazione <-
(prima che =
fosse disponibile come sinonimo), quindi non era disponibile come separatore di parole. Non so per caso perché CamelCase non è stato adottato invece.
Confusamente, methods("is")
rendimenti is.na()
tra molti altri, ma è efficace solo alla ricerca di funzioni il cui nome inizia con "è".; avvisa che "function 'is' appears not to be generic"
Rasmus Bååth's presentation on naming conventions è informativo e divertente (se un po 'deprimente).
credito extra: ci sono dei nomi dei metodi S3 separati da punti, vale a dire i casi in cui un nome di funzione della forma x.y.z
rappresenta il metodo x.y
per gli oggetti con attributo class z
?
risposta (da Hadley Wickham nei commenti): as.data.frame.data.frame()
vittorie.as.data.frame
è un generico S3 (diverso da, ad esempio as.numeric
) e as.data.frame.data.frame
è il suo metodo per gli oggetti data.frame
. Il suo scopo (da ?as.data.frame
):
Se un frame di dati viene fornita, tutte le classi precedenti ‘ 'data.frame'’ sono spogliato, ei nomi di riga viene modificato se questo argomento è fornito.
'is.na' e' read.csv' sono i nomi delle funzioni. È possibile accedere ai rispettivi file della guida digitando '? Is.na' e'? Read.csv'. –
Sarebbe corretto affermare che is.na() e is.numeric() non sono correlati? O appartengono a qualcosa? – NicoFish
'is' viene ripetuto per un certo numero di funzioni tutte che fanno cose simili, vale a dire testare se l'oggetto ha una caratteristica particolare:' is.vector' 'is.numeric'' is.matrix'' is.function' etc etc. Same per 'leggere', normalmente per importare i dati:' read.csv' 'read.fwf'' read.fortran' ecc. Sono una convenzione di denominazione. – thelatemail