135 votes

Convertir une chaîne de caractères en nom de variable

J'utilise R pour analyser une liste de chaînes de caractères 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 originale et je convertis la valeur en classe numérique.

parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"

Ensuite, j'aimerais assigner la valeur à une variable portant le même nom que l'élément parameter_name chaîne de caractères.

variable_name <- parameter_value

Quelle(s) fonction(s) permet(tent) de le faire ?

148voto

Greg Points 4344

Est ce que vous recherchez.

assign("x", 5)

x
[1] 5

mais l'acheteur doit se méfier.

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

2 votes

L'expression "Buyer beware" est une façon assez blasée de dire qu'il ne faut presque jamais faire cela, parce que ce n'est presque jamais une bonne solution pour un problème donné.

0 votes

Avant d'utiliser cette solution, vous pouvez envisager de créer une liste parameter_list <- list() et l'ajout d'une valeur paramter_list[parameter_name] <- parameter_value .

0 votes

Cette solution ne fonctionne que pour l'environnement actuel. Cela signifie que si vous souhaitez faire de la variable une variable globale, vous devez placer la déclaration à un endroit où elle peut être globale. Toutefois, si votre déclaration se trouve à l'intérieur d'une fonction, mais que vous souhaitez tout de même faire de la variable une variable globale, La solution d'Adam ci-dessous ferait l'affaire.

82voto

Wojciech Sobala Points 2950

Vous pouvez utiliser do.call :

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

19 votes

+1 pour la réflexion. Les gens (moi y compris) oublient souvent que <- est elle-même une fonction.

71voto

JohnBee Points 696

Il existe une autre solution simple : 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 de caractères en variable :

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

Et le contraire :

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

40voto

Jozef Janočko Points 341

La fonction que vous recherchez est get() :

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

Confirmation que l'adresse mémoire est identique :

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

Référence : R FAQ 7.21 Comment transformer une chaîne de caractères en variable ?

3 votes

Excellent ! C'est la réponse la plus concise que j'ai trouvée. Existe-t-il un moyen tout aussi concis de faire l'inverse ? comme x <- 42; deparse(substitute(x))

24voto

saiteja Points 88

Utilisation x=as.name("string") . Vous pouvez utiliser puis utiliser x pour faire référence à la variable dont le nom est string.

Je ne sais pas si cela répond correctement à votre question.

4 votes

x=as.symbol("string")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X