Enum-wie Argumente in R

Ich bin neu in R, und ich bin versucht derzeit, die Versorgung der Aufzählung-wie argument der R-Funktion (oder der RC/R6-Methode der Klasse), derzeit nutze ich Zeichen-vector plus match.arg die der folgenden ähnelt:

EnumTest = function(enum = c("BLUE", "RED", "BLACK")) {
  enumArg <-
    switch(
      match.arg(enum), "BLUE" = 0L, "RED" = 1L, "BLACK" = 2L
    )
  switch(enumArg,
         # do something
  )
}

Ist es besser/übersichtlicher Art und Weise zu imitieren enum-wie Verhalten in R? E. g. ein großes problem, dass Nutzer muss wissen, die Menge der möglichen Werte für das argument und geben Sie als string - ohne jede suggestion oder auto-Vervollständigung...

Wenn es keine andere bessere Weise, eine Sache, die sich verbessern konnten obigen Ansatz - es wäre schön, um es kompakt von sagen Vorbelegung von Enumerationen, die Global oder zu sagen, wie private Mitglieder R6 Klasse:

Color <- c("BLUE", "RED", "BLACK")

Dann könnte man (wieder -) verwenden Sie es in einem oder mehreren Funktions-Definitionen, z.B.:

EnumTest = function(enum = Color) { 
...

Allerdings bin ich mir nicht sicher, wie Sie diese Color Vektor in match.arg Funktion. Es wäre schön, wenn ich definieren könnte Color als eine Karte mit Schlüssel tatsächlichen Farbwerte und die Werte integer Darstellung - aber ich bin mir nicht sicher, wie sinnvoll das ist.. na ja, vielleicht gibt es mehr gemeinsame nette Ansätze vorhanden.

Das wichtigste Ziel wäre es, eine einfach zu bedienende intuitive Schnittstelle, um die Benutzer von mein Paket und die Funktionen (z.B. die einfache Möglichkeit zu finden, die Menge der möglichen Werte, tab-Vervollständigung, auto-suggestion, etc..), gefolgt von standardisierten Entwicklung solcher Funktionen, die mit enum-wie Argumente

  • Was ist mit Faktoren? Sie sind im Grunde built-in enums
  • Könnten Sie bitte erweitern oder bieten Beispiel, wenn möglich? Habe ich mir angeschaut Faktoren kurz aber hatte nicht bemerkt, wie Sie besser werden können in der oben genannten Argumente Aufgabe.. es ist eine riesige chance, dass ich etwas übersehen
  • Ja, ich verstehe das. Meine Frage ist, wie man richtig verwenden Sie für die übergabe von Argumenten... Wenn ich definieren, sagen func <- function(enum = factor(c("a", "b", "c")) - und Benutzer-Anrufe func(enum = "a") dann innerhalb der Funktion enum argument ist nur ein Charakter.. ich bin mir nicht sicher, ob es überhaupt möglich ist, um die int-Darstellung
  • und wie ist es schlimmer als das, was Sie jetzt mit array von chars? Es ist deutlich besser, Faktoren, Ebenen und Ordnung, und Sie könnte konvertieren von zugrunde liegenden integer zu string und wieder zurück, etc.
  • Ich sage nicht, dass es noch schlimmer :), Nur versuchen zu verstehen..., wie man richtig verwenden Sie in diesem speziellen Fall
  • Ich würde den Faktor Farbe und legen Sie es in umschließenden Umgebung. Übergabe in/out entweder Ganzzahlen oder Zeichenfolgen und überprüfen Sie Sie gegen die Farbe Faktor, Konvertierung zu/von int verwenden es, im Grunde, wie gesagt It'd be nice if I could define Color as a map with keys being actual color values and values being integer representation
  • ok, vielen Dank. obwohl ich nicht sicher bin, wie verify them against Color factor, convert to/from int using it effizient/kompakt

Schreibe einen Kommentar