Estoy usando R para analizar una lista de cadenas en el formulario:
original_string <- "variable_name=variable_value"
Primero, extraigo el nombre y el valor de la variable de la cadena original y convierto el valor en una clase numérica.
parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"
Luego, me gustaría asignar el valor a una variable con el mismo nombre que la cadena parameter_name.
variable_name <- parameter_value
¿Cuáles son las funciones para hacer esto?
Puede usar do.call:
fuente
<-
es una función en sí misma.Hay otra solución simple que se encuentra allí: http://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-vice-versa-in-r/
Para convertir una cadena en una variable:
Y al contrario:
fuente
use
x=as.name("string")
que puede usar y luego usex
para referirse a la variable con el nombre cadena.No sé si responde tu pregunta correctamente.
fuente
x=as.symbol("string")
La función que busca es
get()
:Confirmando que la dirección de la memoria es idéntica:
Referencia: R FAQ 7.21 ¿Cómo puedo convertir una cadena en una variable?
fuente
x <- 42; deparse(substitute(x))
strsplit
para analizar su entrada y, como Greg mencionó,assign
para asignar las variables.fuente
assign
es bueno, pero no he encontrado una función para hacer referencia a la variable que ha creado en un script automatizado. (as.name
parece funcionar al revés). Los programadores más experimentados sin duda tendrán una mejor solución, pero esta solución funciona y quizás sea un poco graciosa, ya que hace que R escriba código para que lo ejecute.Digamos que acabo de asignar el valor 5 a
x
(var.name <- "x"; assign(var.name, 5)
) y quiero cambiar el valor a 6. Si estoy escribiendo un script y no sé de antemano cuálvar.name
será el nombre de la variable ( ) (que parece ser el punto delassign
función), no puedo decir simplementex <- 6
porquevar.name
podría haber sido"y"
. Así que hago:x
se cambiará a 6, y si el nombre de la variable era diferente a"x"
, esa variable se habrá cambiado de manera similar a 6.fuente
Estuve trabajando con esto hace unos días y noté que a veces necesitará usar la
get()
función para imprimir los resultados de su variable. es decir:A partir de ahí, si intenta imprimir la variable
varnames[1]
, devuelve 'jan'. Para solucionar esto, debe hacerprint(get(varnames[1]))
fuente
Quizás no entendí bien tu problema, debido a la simplicidad de tu ejemplo. A mi entender, tiene una serie de instrucciones almacenadas en vectores de caracteres, y esas instrucciones están muy cerca de estar formateadas correctamente, excepto que le gustaría convertir el miembro correcto en numérico.
Si mi entendimiento es correcto, me gustaría proponer un enfoque ligeramente diferente, que no se basa en dividir su cadena original, sino que evalúa directamente su instrucción (con una pequeña mejora).
Básicamente, lo que estamos haciendo es "mejorar" su instrucción
variable_name="10"
para que se convierta envariable_name="10" %>% as.numeric
, lo que es un equivalentevariable_name=as.numeric("10")
a lamagrittr
sintaxis de flujo continuo. Luego evaluamos esta expresión dentro del entorno actual.Espero que ayude a alguien que paseara por aquí 8 años después ;-)
fuente
Si desea convertir una cadena en una variable dentro del cuerpo de la función, pero desea tener una variable global:
fuente