Due domande R:
- Qual è la differenza tra il tipo (restituito da
typeof
) e la classe (restituita daclass
) di una variabile? La differenza è simile a quella, diciamo, nel linguaggio C ++? - Quali sono i possibili tipi e classi di variabili?
Due domande R:
typeof
) e la classe (restituita da class
) di una variabile? La differenza è simile a quella, diciamo, nel linguaggio C ++?Risposte:
In R ogni "oggetto" ha un mode
e a class
. Il primo rappresenta il modo in cui un oggetto viene archiviato in memoria (numerico, carattere, lista e funzione) mentre il secondo rappresenta il suo tipo astratto. Per esempio:
d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list
Come puoi vedere i frame di dati sono archiviati in memoria list
ma sono avvolti in data.frame
oggetti. Quest'ultimo consente l'utilizzo di funzioni membro e di funzioni di sovraccarico come print
con un comportamento personalizzato.
typeof
( storage.mode
) di solito fornisce le stesse informazioni mode
ma non sempre. Caso in questione:
typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"
Il ragionamento alla base di questo può essere trovato qui :
La funzione specifica di R typeof restituisce il tipo di un oggetto R.
La modalità funzione fornisce informazioni sulla modalità di un oggetto nel senso di Becker, Chambers & Wilks (1988) ed è più compatibile con altre implementazioni del linguaggio S
Il link che ho postato sopra contiene anche un elenco di tutti i nativi R basic types
(vettori, elenchi ecc.) E tutti compound objects
(fattori e data.frames) così come alcuni esempi di come mode
, typeof
e class
sono correlati per ogni tipo.
oldClass(matrix(1:10, 2,5)) # NULL
type
si riferisce realmente alle diverse strutture dati disponibili in R. Questa discussione nel manuale R Language Definition può farti iniziare con oggetti e tipi.
D'altra parte, class
significa qualcos'altro in R rispetto a quello che potresti aspettarti. Dal manuale di definizione della lingua R (fornito con la versione di R):
2.2.4 Classi
R ha un elaborato sistema di classi 1 , controllato principalmente tramite l'attributo class. Questo attributo è un vettore di caratteri contenente l'elenco delle classi da cui un oggetto eredita. Ciò costituisce la base della funzionalità "metodi generici" in R.
È possibile accedere a questo attributo e manipolarlo virtualmente senza limitazioni da parte degli utenti. Non è possibile verificare che un oggetto contenga effettivamente i componenti che i metodi di classe si aspettano. Pertanto, la modifica dell'attributo class dovrebbe essere eseguita con cautela e, quando sono disponibili, dovrebbero essere preferite funzioni di creazione e coercizione specifiche.