2011-05-17 3 views
60

J'utilise R pour analyser une liste de chaînes sous la forme:string Convertir un nom de variable

original_string <- "variable_name=variable_value" 

D'abord, j'extraire le nom de la variable et la valeur de la chaîne d'origine et de convertir la valeur à la classe numérique . Puis, je voudrais attribuer la valeur à une variable avec le même nom que la chaîne de paramètres.

variable_name <- parameter_value 

Quelle est la/les fonction (s) pour cela?

Répondre

8

strsplit pour analyser votre entrée et, comme Greg mentionné, assign pour assigner les variables.

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() 
47

Vous pouvez utiliser do.call:

do.call("<-",list(parameter_name, parameter_value)) 
+5

+1 pour la pensée.Les gens (moi inclus) oublient habituellement que '<-' est une fonction elle-même. – Rob

12

utilisation x = as.name ("string") vous pouvez utiliser ensuite utiliser x pour faire référence à la variable avec chaîne de nom.

Je ne sais pas si elle répond à votre question

+1

'x = as.symbol (" chaîne ")' –

4

assign est bon, mais je n'ai pas trouvé une fonction pour renvoyer à la variable que vous avez créé dans un script automatisé. (as.name semble fonctionner dans le sens inverse). Les codeurs plus expérimentés auront sans doute une meilleure solution, mais cette solution fonctionne et est peut-être un peu humoristique, en ce sens que R obtient du code pour s'exécuter.

dire que je viens de valeur attribuée 5-x (var.name <- "x"; assign(var.name, 5)) et je veux changer la valeur à 6. Si je suis en train d'écrire un script et je ne sais pas à l'avance ce que le nom de la variable (var.name) sera (qui semble être le point de la fonction assign), je ne peux pas simplement mettre x <- 6 parce que var.name aurait pu être "y". Alors je fais:

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 sera changé à 6, et si le nom de la variable était autre chose que "x", cette variable aura été modifiée de façon similaire à 6.

Questions connexes