it-swarm.com.de

Konvertieren Sie den String in einen Variablennamen

Ich verwende R, um eine Liste von Strings im Formular zu parsen:

original_string <- "variable_name=variable_value"

Zuerst extrahiere ich den Variablennamen und -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), um dies zu tun?

77
KnowledgeBone

zuweisen ist, was Sie suchen.

assign("x", 5)

x
[1] 5

aber käufer hüten sich.

Siehe R FAQ 7.21 http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a -variable_003f

102
Greg

Sie können do.call verwenden:

 do.call("<-",list(parameter_name, parameter_value))
54
Wojciech Sobala

Dort gibt es eine andere einfache Lösung: http://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-ice-versa -in-r/

So konvertieren Sie einen String in eine Variable:

x <- 42
eval(parse(text = "x"))
[1] 42

Und das Gegenteil:

x <- 42
deparse(substitute(x))
[1] "x"
38
JohnBee

verwenden Sie x = as.name ("string") Sie können dann mit x auf die Variable mit dem Namen string verweisen. 

Ich weiß nicht, ob Ihre Frage richtig beantwortet wird

15
saiteja

strsplit, um Ihre Eingabe zu analysieren und, wie Greg erwähnt, assign, um die Variablen zuzuweisen.

original_string <- c("x=123", "y=456")
pairs <- strsplit(original_string, "=")
lapply(pairs, function(x) assign(x[1], as.numeric(x[2]), envir = globalenv()))
ls()
9
Richie Cotton

assign ist gut, aber ich habe keine Funktion gefunden, um auf die Variable zu verweisen, die Sie in einem automatisierten Skript erstellt haben. (as.name scheint umgekehrt zu arbeiten). Erfahrene Codierer haben zweifellos eine bessere Lösung, aber diese Lösung funktioniert und ist vielleicht etwas humorvoll, da R dazu gebracht wird, Code für sich selbst zu schreiben.

Angenommen, ich habe gerade x (var.name <- "x"; assign(var.name, 5)) den Wert 5 zugewiesen, und ich möchte den Wert in 6 ändern. Wenn ich ein Skript schreibe und nicht im Voraus weiß, wie der Variablenname (var.name) sein wird (was das zu sein scheint) Punkt der assign-Funktion), ich kann x <- 6 nicht einfach einfügen, da var.name"y" gewesen sein könnte. So ich mache:

var.name <- "x"
#some other code...
assign(var.name, 5)
#some more code...

#write a script file (1 line in this case) that works with whatever variable name
write(paste0(var.name, " <- 6"), "tmp.R")
#source that script file
source("tmp.R")
#remove the script file for tidiness
file.remove("tmp.R")

x wird in 6 geändert. Wenn der Variablenname nicht "x" war, wurde diese Variable ebenfalls in 6 geändert.

5
CJB

Die Funktion, die Sie suchen, ist get():

assign ("abc",5)
get("abc")

Bestätigen, dass die Speicheradresse identisch ist:

getabc <- get("abc")
pryr::address(abc) == pryr::address(getabc)
# [1] TRUE

Referenz: R FAQ 7.21 Wie kann ich eine Zeichenfolge in eine Variable umwandeln?

5
Jozef Janočko

Wenn Sie eine Zeichenfolge in eine Variable innerhalb des Funktionskörpers konvertieren möchten, die Variable jedoch global haben möchten, gehen Sie wie folgt vor:

test <- function() {
do.call("<<-",list("vartest","xxx"))
}
test()
vartest

[1] "xxx"
0
adam borkowski

Ich habe vor ein paar Tagen damit gearbeitet, und ich habe festgestellt, dass Sie manchmal die Funktion get() verwenden müssen, um die Ergebnisse Ihrer Variablen zu drucken. 

varnames = c('jan', 'feb', 'march')
file_names = list_files('path to multiple csv files saved on drive')
assign(varnames[1], read.csv(file_names[1]) # This will assign the variable

Wenn Sie versuchen, die Variable varnames[1] zu drucken, wird 'jan' zurückgegeben. Um dies zu umgehen, müssen Sie print(get(varnames[1]))

0
eigenfoo