2016-03-23 14 views
0

Ich habe eine Teilmenge von Daten in r wie folgt: "Subset < - Teilmenge (x, select = c (" var1 "," var2 "," var3 "))". Jetzt habe ich zwei Funktionen, die zwei verschiedene Graphen erstellen. Einer ist eine Tabelle und der andere ist ein Balkendiagramm. Eine Funktion ist "quick_table (variable_name, label, sort)" Die andere wird erstellt von "table.desc < - beschreiben (as.factor (eval (parse (text =" variable "))))" und dann "Pandoc .table (table.desc $ values) ". Ich möchte eine for-Schleife erstellen, die die drei Variablen durchläuft, um sechs Graphen zu erstellen. Das Problem ist, dass "quick_table" vom Variablennamen abhängt, also "var1", "var2", "var3" und "table.desc" abhängig von "x $ var1", "x $ var2", x $ var3 ".Looping durch Variablen

Mein Code ist:.?

for(variable in Subset) { 
variable_name <- assign(sub("x$", replacement = "", x$variable, fixed = TRUE), variable) 
label <- variable_name 
sort <- variable_name 

print(quick_table(variable_name, label, sort) 
table.desc <- describe(as.factor(eval(parse(text = "variable")))) 
print(pandoc.table(table.desc$values)) 
} 

Das ist nicht eine Schleife durch meine Variablenliste scheint Irgendwelche Ideen Vielen Dank im Voraus

+0

Verwenden Sie nicht "zuweisen", sondern Dinge in eine "Liste". – Gregor

+0

Ich weiß nicht, was 'x' in Ihrem Beispiel ist, aber wenn Sie' ['oder' [['anstatt' $ 'verwenden, können Sie Zeichenketten verwenden, zB' v = "var1" 'then' x [[v]] 'ist äquivalent zu' x $ var1'. Siehe auch 'fortunes :: fortune (312)'. – Gregor

Antwort

0

Wenn ich Ihre Frage richtig zu verstehen, können Sie eval(parse(text =))), um eine Variable aus der Zeichenfolge ihres Namens aufzurufen

Zum Beispiel, wenn Sie die Teilmengen einer Variablen, die jeweils den Namen "x$var1", "x$var2", "x$var3", in der gleichen for Schleife nennen wollen, könnten Sie tun:

for(i in 1:3){ eval(parse(text = paste0("x$var", i))) }

Diese x$var1 nennen würde, x$var2 und x$var3. Sie können dann diese Aufrufe verwenden, um beliebige Tabellen zu erstellen. Ich hoffe das hilft!

+0

Sie liegen nicht falsch. Aber das ist nicht die Art, wie du das tun sollst. – Dason

+0

@Dason Wie würdest du das machen? Interessiert zu wissen. Vielen Dank! –

+0

Der von @Gregor in den Kommentaren implizierte Weg ist der Verwendung von eval/parse vorzuziehen. – Dason