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, j'aimerais attribuer la valeur à une variable portant 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?
attribuer est ce que vous recherchez.
assign("x", 5)
x
[1] 5
mais acheteur méfiez-vous.
Voir R FAQ 7.21 http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I- Tour- -variable_003f
Vous pouvez utiliser do.call:
do.call("<-",list(parameter_name, parameter_value))
Une autre solution simple existe: 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 une variable:
x <- 42
eval(parse(text = "x"))
[1] 42
Et le contraire:
x <- 42
deparse(substitute(x))
[1] "x"
utilisez x = as.name ("chaîne") vous pouvez ensuite utiliser x pour désigner la variable portant le nom chaîne
Je ne sais pas si cela répond correctement à votre question
strsplit
pour analyser votre entrée et, comme Greg l'a mentionné, assign
pour affecter 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()
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 opposé). Les codeurs plus expérimentés auront sans doute une meilleure solution, mais cette solution fonctionne et est peut-être légèrement humoristique, en ce sens qu'elle oblige R à écrire du code pour lui-même à exécuter.
Supposons que je viens d’attribuer la valeur 5 à x
(var.name <- "x"; assign(var.name, 5)
) et que je souhaite changer la valeur à 6. Si j’écris un script et que je ne sais pas à l’avance quel sera le nom de la variable (var.name
) (qui semble être le point de la fonction assign
), je ne peux pas simplement mettre x <- 6
car var.name
aurait pu être "y"
. Moi aussi:
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é en 6, et si le nom de la variable était autre que "x"
, cette variable aura également été changée en 6.
La fonction que vous recherchez est get()
:
assign ("abc",5)
get("abc")
Confirmer 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 puis-je transformer une chaîne en une variable?
Si vous voulez convertir une chaîne en variable dans le corps de la fonction, mais que vous voulez avoir une variable globale:
test <- function() {
do.call("<<-",list("vartest","xxx"))
}
test()
vartest
[1] "xxx"
Je travaillais avec cela il y a quelques jours et j'ai remarqué que vous aurez parfois besoin d'utiliser la fonction get()
pour imprimer les résultats de votre variable .
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
A partir de là, si vous essayez d'imprimer la variable varnames[1]
, elle retourne 'jan'. Pour contourner ce problème, vous devez utiliser print(get(varnames[1]))