Looking for r Keywords? Try Ask4Keywords

R LanguageFaktoren


Syntax

  1. Faktor (x = Zeichen (), Ebenen, Beschriftungen = Ebenen, ausschließen = NA, geordnet = ist.geordnet (X), nmax = NA)
  2. Run ?factor oder Online- Dokumentation .

Bemerkungen

Ein Objekt mit dem Klasse - factor ist ein Vektor mit einem bestimmten Satz von Eigenschaften.

  1. Es wird intern als integer gespeichert.
  2. Es verwaltet ein levels , das die Zeichendarstellung der Werte zeigt.
  3. Ihre Klasse wird als factor gespeichert

Lassen Sie uns zur Veranschaulichung aus einem Satz von Farben einen Vektor von 1.000 Beobachtungen erzeugen.

set.seed(1)
Color <- sample(x = c("Red", "Blue", "Green", "Yellow"), 
                size = 1000, 
                replace = TRUE)
Color <- factor(Color)

Wir können jede der oben aufgeführten Eigenschaften von Color beobachten:

#* 1. It is stored internally as an `integer` vector
typeof(Color)
[1] "integer"
#* 2. It maintains a `levels` attribute the shows the character representation of the values.
#* 3. Its class is stored as `factor`
attributes(Color)
$levels
[1] "Blue"   "Green"  "Red"    "Yellow"

$class
[1] "factor"

Der Hauptvorteil eines Faktorobjekts ist die Effizienz bei der Datenspeicherung. Eine Ganzzahl erfordert weniger Speicherplatz als ein Zeichen. Eine solche Effizienz war äußerst wünschenswert, wenn viele Computer über weitaus geringere Ressourcen als derzeitige Computer verfügten (für eine genauere Beschreibung der Gründe für die Verwendung von Faktoren siehe stringsAsFactors : eine nicht autorisierte Biografie ). Der Unterschied bei der Speichernutzung ist sogar in unserem Color Objekt sichtbar. Wie Sie sehen können, erfordert das Speichern von Color als Zeichen etwa 1,7-mal so viel Speicher wie das Faktorobjekt.

#* Amount of memory required to store Color as a factor.
object.size(Color)
4624 bytes
#* Amount of memory required to store Color as a character
object.size(as.character(Color))
8232 bytes

Die Ganzzahl der Ebene zuordnen

Während die interne Berechnung von Faktoren das Objekt als Ganzzahl sieht, ist die gewünschte Darstellung für den menschlichen Konsum die Zeichenebene. Zum Beispiel,

head(Color)
[1] Blue   Blue   Green  Yellow Red    Yellow  
Levels: Blue Green Red Yellow

ist für das menschliche Verständnis einfacher als

head(as.numeric(Color))
[1] 1 1 2 4 3 4

Eine ungefähre Darstellung, wie R die Zeichendarstellung an den internen Integerwert anpasst, ist:

head(levels(Color)[as.numeric(Color)])
[1] "Blue"   "Blue"   "Green"  "Yellow" "Red"    "Yellow"

Vergleichen Sie diese Ergebnisse mit

head(Color)
[1] Blue   Blue   Green  Yellow Red    Yellow  
Levels: Blue Green Red Yellow

Moderne Nutzung von Faktoren

Im Jahr 2007 führte R eine Hashmethode für Zeichen ein, um die Speicherlast von Zeichenvektoren zu reduzieren (ref: stringsAsFactors : a Unauthorized Biography ). Wenn wir festgestellt haben, dass Zeichen 1,7-mal mehr Speicherplatz benötigen als Faktoren, wurde dies in einer aktuellen Version von R berechnet, was bedeutet, dass der Speicherverbrauch von Zeichenvektoren vor 2007 noch mehr belastend war.

Aufgrund des Hash-Verfahrens in modernen R und der weitaus größeren Speicherressourcen in modernen Computern wurde das Problem der Speichereffizienz beim Speichern von Zeichenwerten auf ein sehr kleines Problem reduziert. Die vorherrschende Einstellung in der R-Gemeinschaft ist in den meisten Situationen eine Bevorzugung von Zeichenvektoren gegenüber Faktoren. Die Hauptursachen für die Abkehr von Faktoren sind

  1. Die Zunahme unstrukturierter und / oder lose kontrollierter Zeichendaten
  2. Die Tendenz von Faktoren, sich nicht wie gewünscht zu verhalten, wenn der Benutzer vergisst, dass er mit einem Faktor und nicht mit einem Charakter zu tun hat

Im ersten Fall macht es keinen Sinn, Freitext oder offene Antwortfelder als Faktoren zu speichern, da es unwahrscheinlich ist, dass ein Muster vorhanden ist, das mehr als eine Beobachtung pro Ebene zulässt. Alternativ, wenn die Datenstruktur nicht sorgfältig gesteuert wird, ist es möglich, mehrere Ebenen zu erhalten, die derselben Kategorie entsprechen (z. B. "blau", "blau" und "blau"). In solchen Fällen ziehen es viele vor, diese Diskrepanzen als Zeichen zu verwalten, bevor sie in einen Faktor umgewandelt werden (wenn überhaupt eine Konvertierung erfolgt).

Im zweiten Fall, wenn der Benutzer der Meinung ist, dass er mit einem Zeichenvektor arbeitet, reagieren bestimmte Methoden möglicherweise nicht wie erwartet. Dieses grundlegende Verständnis kann beim Debuggen von Skripts und Codes zu Verwirrung und Frustration führen. Genau genommen kann dies als Verschulden des Benutzers betrachtet werden. Die meisten Benutzer verzichten jedoch gerne auf Faktoren und vermeiden diese Situationen insgesamt.

Faktoren Verwandte Beispiele