Modalità, classe e tipo di oggetti R.


39

Mi chiedevo quali sono le differenze tra modalità, classe e tipo di oggetti R? Il tipo di un oggetto R può essere ottenuto dalla funzione typeof (), mode by mode () e class by class ().

Anche altre funzioni e concetti simili che mi sono persi?

Grazie e saluti!


2
str (variabile) è il tuo migliore amico.
Brandon Bertelsen,

2
Vedi anche R: Tipi e classi di variabili in questione su Stack Overflow.
Leo,

Risposte:


21

La class()viene utilizzato per definire / identificare quale "tipo" un oggetto è dal punto di vista della programmazione orientata agli oggetti in R. Quindi per

> x <- 1:3
> class(x)
[1] "integer"

verrà utilizzata qualsiasi funzione generica che ha un metodo "intero".

typeof()fornisce il "tipo" di oggetto dal punto di vista di R, mentre mode()fornisce il "tipo" di oggetto dal punto di vista di Becker, Chambers & Wilks (1988). Quest'ultimo potrebbe essere più compatibile con altre implementazioni S secondo il manuale R Language Definition .

Probabilmente errerei sul lato dell'uso typeof()nella maggior parte dei casi a meno che non fosse per il passaggio di oggetti R al codice compilato, dove storage.mode()sarebbe utile.

Questo è utilmente discusso nella definizione del linguaggio R come linkato sopra.


3
Perché ci sono così tanti punti di vista? Non vedo benefici ma confusione.
smwikipedia,

1
@smwikipedia perché R ha un'eredità che include S-Plus e S e che quest'ultima lingua si è evoluta nel tempo. Inoltre, è necessario distinguere tra gli oggetti che gli utenti possono creare e i tipi di oggetti di base.
Ripristina Monica - G. Simpson,

@smwikipedia perché è così che R è. Per lo stesso motivo che abbiamo <-e =per assegnazione variabile.
Andre Terra,

9

Da: https://www.mail-archive.com/r-help@r-project.org/msg17169.html :

'mode' è una classificazione reciprocamente esclusiva degli oggetti in base alla loro struttura di base. Le modalità "atomiche" sono numeriche, complesse, di carattere e logiche. Gli oggetti ricorsivi hanno modalità come 'list' o 'function' o pochi altri. Un oggetto ha una sola modalità.

'class' è una proprietà assegnata a un oggetto che determina il modo in cui le funzioni generiche operano con esso. Non è una classificazione reciprocamente esclusiva. Se a un oggetto non è assegnata una classe specifica, ad esempio un semplice vettore numerico, la sua classe è di solito la stessa della sua modalità, per convenzione.

Cambiare la modalità di un oggetto è spesso chiamato "coercizione". La modalità di un oggetto può cambiare senza necessariamente cambiare la classe.


1

La principale differenza tra class e typeof è che il primo può essere definito dall'utente, ma il tipo no. Ad esempio, definire un elenco

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

Per assegnare un determinato nome di classe a un oggetto definito dall'utente è molto utile scrivere programmi. Permette di taggare oggetti definiti dall'utente in modo simile a quanto accade nei linguaggi di programmazione orientati agli oggetti.


Secondo la Rdocumentazione di typeofe class, l'affermazione sulla "differenza principale" non è corretta. classè un attributo di un oggetto che può essere assegnato indipendentemente dalla sua modalità di archiviazione interna, mentre "typeof determina il tipo (R interno) o la modalità di archiviazione di qualsiasi oggetto". Uno descrive una caratteristica logica mentre l'altro è una caratteristica fisica di un oggetto.
whuber
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.