Ich verwende R, um eine Liste von Zeichenfolgen in der folgenden Form zu analysieren:
original_string <- "variable_name=variable_value"
Zuerst extrahiere ich den Variablennamen und den Wert aus der ursprünglichen Zeichenfolge und konvertiere den Wert in eine numerische Klasse.
parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"
Dann möchte ich den Wert einer Variablen mit demselben Namen wie die Zeichenfolge parameter_name zuweisen.
variable_name <- parameter_value
Was ist / sind die Funktion (en) dafür?
Sie können do.call verwenden:
quelle
<-
eine Funktion selbst ist.Dort gibt es eine andere einfache Lösung: http://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-vice-versa-in-r/
So konvertieren Sie eine Zeichenfolge in eine Variable:
Und das Gegenteil:
quelle
Mit use können
x=as.name("string")
Sie dannx
auf die Variable mit der Namenszeichenfolge verweisen.Ich weiß nicht, ob es Ihre Frage richtig beantwortet
quelle
x=as.symbol("string")
Die gesuchte Funktion ist
get()
:Bestätigen, dass die Speicheradresse identisch ist:
Referenz: R FAQ 7.21 Wie kann ich einen String in eine Variable verwandeln?
quelle
x <- 42; deparse(substitute(x))
strsplit
um Ihre Eingabe zu analysieren und, wie Greg erwähnte,assign
die Variablen zuzuweisen.quelle
assign
ist gut, aber ich habe keine Funktion gefunden, um auf die Variable zurückzugreifen, die Sie in einem automatisierten Skript erstellt haben. (as.name
scheint umgekehrt zu funktionieren). Erfahrene Codierer werden zweifellos eine bessere Lösung haben, aber diese Lösung funktioniert und ist vielleicht etwas humorvoll, da sie R dazu bringt, Code für sich selbst zu schreiben, um ihn auszuführen.Angenommen, ich habe gerade den Wert 5 zugewiesen
x
(var.name <- "x"; assign(var.name, 5)
) und möchte den Wert auf 6 ändern. Wenn ich ein Skript schreibe und nicht im Voraus weiß, wie der Variablenname (var.name
) lauten wird (was der Sinn des zu sein scheint)assign
Funktion), kann ich nicht einfach sagen,x <- 6
weil esvar.name
gewesen sein könnte"y"
. So ich mache:x
wird in 6 geändert, und wenn der Variablenname etwas anderes als war"x"
, wurde diese Variable ebenfalls in 6 geändert.quelle
Ich habe vor einigen Tagen damit gearbeitet und festgestellt, dass Sie manchmal die
get()
Funktion verwenden müssen, um die Ergebnisse Ihrer Variablen zu drucken. dh:Wenn Sie von dort aus versuchen, die Variable zu drucken
varnames[1]
, wird 'jan' zurückgegeben. Um dies zu umgehen, müssen Sie dies tunprint(get(varnames[1]))
quelle
Vielleicht habe ich Ihr Problem aufgrund der Einfachheit Ihres Beispiels nicht richtig verstanden. Nach meinem Verständnis haben Sie eine Reihe von Anweisungen in Zeichenvektoren gespeichert, und diese Anweisungen sind fast richtig formatiert, außer dass Sie das richtige Element in numerisch umwandeln möchten.
Wenn mein Verständnis stimmt, möchte ich einen etwas anderen Ansatz vorschlagen, der nicht auf der Aufteilung Ihrer ursprünglichen Zeichenfolge beruht, sondern Ihre Anweisung direkt bewertet (mit einer kleinen Verbesserung).
Grundsätzlich tun wir, dass wir Ihren Unterricht
variable_name="10"
so "verbessern" , dass er zuvariable_name="10" %>% as.numeric
einem Äquivalent vonvariable_name=as.numeric("10")
mit wirdmagrittr
Rohr-Stream - Syntax. Dann bewerten wir diesen Ausdruck in der aktuellen Umgebung.Hoffe das hilft jemandem, der 8 Jahre später hier herumwandert ;-)
quelle
Wenn Sie einen String in eine Variable innerhalb des Funktionskörpers konvertieren möchten, aber eine globale Variable haben möchten:
quelle