J'utilise R pour analyser une liste de chaînes sous la forme:
original_string <- "variable_name=variable_value"
Tout d'abord, j'extrais le nom et la valeur de la variable de la chaîne d'origine et convertis la valeur en classe numérique.
parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"
Ensuite, je voudrais attribuer la valeur à une variable avec le même nom que la chaîne nom_paramètre.
variable_name <- parameter_value
Quelle est / sont la (les) fonction (s) pour faire cela?
Vous pouvez utiliser do.call:
la source
<-
c'est une fonction en soi.Une autre solution simple s'y trouve: http://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-vice-versa-in-r/
Pour convertir une chaîne en variable:
Et le contraire:
la source
utiliser
x=as.name("string")
vous pouvez utiliser puis utiliserx
pour faire référence à la variable avec la chaîne de nom.Je ne sais pas si ça répond correctement à ta question
la source
x=as.symbol("string")
La fonction que vous recherchez est
get()
:Confirmer que l'adresse mémoire est identique:
Référence: R FAQ 7.21 Comment puis-je transformer une chaîne en variable?
la source
x <- 42; deparse(substitute(x))
strsplit
pour analyser votre entrée et, comme Greg l'a mentionné,assign
pour affecter les variables.la source
assign
c'est bien, mais je n'ai pas trouvé de fonction pour renvoyer à la variable que vous avez créée dans un script automatisé. (as.name
semble fonctionner dans le sens inverse). Les codeurs plus expérimentés auront sans aucun doute une meilleure solution, mais cette solution fonctionne et est peut-être un peu humoristique, en ce sens qu'elle oblige R à écrire du code pour lui-même à exécuter.Disons que je viens d'attribuer la valeur 5 à
x
(var.name <- "x"; assign(var.name, 5)
) et que je veux changer la valeur en 6. Si j'écris un script et que je ne sais pas à l'avance quel sera le nom de la variable (var.name
) (ce qui semble être le point duassign
fonction), je ne peux pas simplement mettrex <- 6
parce que celavar.name
aurait pu être"y"
. Moi aussi:x
sera changé en 6, et si le nom de la variable était autre chose que"x"
, cette variable aura également été changée en 6.la source
Je travaillais avec cela il y a quelques jours et j'ai remarqué que parfois vous devrez utiliser la
get()
fonction pour imprimer les résultats de votre variable. c'est à dire :À partir de là, si vous essayez d'imprimer la variable
varnames[1]
, elle renvoie «jan». Pour contourner ce problème, vous devez faireprint(get(varnames[1]))
la source
Peut-être que je n'ai pas bien compris votre problème, à cause de la simplicité de votre exemple. À ma connaissance, vous avez une série d'instructions stockées dans des vecteurs de caractères, et ces instructions sont très proches d'être correctement formatées, sauf que vous souhaitez convertir le bon membre en numérique.
Si je comprends bien, je voudrais proposer une approche légèrement différente, qui ne repose pas sur le fractionnement de votre chaîne d'origine, mais évalue directement votre instruction (avec une petite amélioration).
Fondamentalement, ce que nous faisons, c'est que nous «améliorons» votre instruction
variable_name="10"
pour qu'elle le deviennevariable_name="10" %>% as.numeric
, ce qui équivautvariable_name=as.numeric("10")
à lamagrittr
syntaxe du flux de tuyaux. Ensuite, nous évaluons cette expression dans l'environnement actuel.J'espère que cela aidera quelqu'un qui errerait ici 8 ans plus tard ;-)
la source
Si vous souhaitez convertir une chaîne en variable dans le corps de la fonction, mais que vous souhaitez avoir une variable globale:
la source