Kann eine Zeichenfolge des folgenden Formulars ausgewertet werden, sodass sie dem gleichen "Literal" -Ausdruck entspricht.
Beispiel Daten und Code
df.name = data.frame(col1 = 1:5, col2 = LETTERS[seq(1:5)], col3 = letters[seq(1:5)], stringsAsFactors = FALSE)
col.name = "col2"
row.num = "4"
var1 = str_c("df.name$", col.name,"[",row.num,"]")
> var1
[1] "df.name$col2[4]"
Die wörtliche funktioniert wie erwartet
> df.name$col2[4]
[1] D
get() ist nicht gleichbedeutend
get(var1)
Error in get(var1) : object 'df.name$col2[4]' not found
Diese Form von get() "funktioniert" aber löst nicht das Problem
get("df.name")$col2[4]
[1] D
Pro andere Beiträge habe ich versucht, eval (parse()) und eval (parse (text())) ohne Erfolg.
Ich versuche, eine Funktion zu erstellen, die (df.name
) unter Verwendung der col.name
, die an die Funktion übergeben wird. Ich möchte vermeiden, eine separate Funktion für jeden Spaltennamen zu schreiben, obwohl das funktionieren wird, da ich df.name$col2[row.num]
als ein "Literal" codieren kann.
EDIT
Der Beispielcode die row.num als Typ numeric/integer gezeigt haben sollte, dh row.num = 4
Parsing Code als Strings ist nie die Antwort. 'df.name [[col.name]] [as.numeric (row.num)]' ist eine Möglichkeit für Sie. Aber ich denke, du solltest dich fragen, wie du mit einer Zeichendarstellung einer Zeilennummer endete und dort anfängst. –
Near-Duplikat: http://stackoverflow.com/questions/39560780/how-do-i-refer-to-a-data-frame-element-with-strings-in-r/39563674#39563674 –
wenn Sie wirklich Dazu muss 'eval (parse (text = var1))' funktionieren (funktioniert bei mir). Aber @ RichScriven's Lösung (aber mit 'get (df.name)' anstelle von 'df.name') sollte funktionieren. –