Estou usando R para analisar uma lista de strings na forma:
original_string <- "variable_name=variable_value"
Primeiro, extraio o nome da variável e o valor da string original e converto o valor em uma classe numérica.
parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"
Então, eu gostaria de atribuir o valor a uma variável com o mesmo nome da string parameter_name.
variable_name <- parameter_value
Qual é / são a (s) função (ões) para fazer isso?
Você pode usar do.call:
fonte
<-
é uma função em si.Há outra solução simples encontrada lá: http://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-vice-versa-in-r/
Para converter uma string em uma variável:
E o oposto:
fonte
use
x=as.name("string")
você pode usar then usex
para referir-se à variável com string de nome.Não sei se responde sua pergunta corretamente
fonte
x=as.symbol("string")
A função que você está procurando é
get()
:Confirmando que o endereço de memória é idêntico:
Referência: R FAQ 7.21 Como posso transformar uma string em uma variável?
fonte
x <- 42; deparse(substitute(x))
strsplit
para analisar sua entrada e, como Greg mencionou,assign
para atribuir as variáveis.fonte
assign
é bom, mas não encontrei uma função para fazer referência à variável que você criou em um script automatizado. (as.name
parece funcionar de maneira oposta). Os programadores mais experientes sem dúvida terão uma solução melhor, mas essa solução funciona e talvez seja um pouco engraçada, pois faz com que R escreva código para ele mesmo executar.Digamos que acabei de atribuir o valor 5 a
x
(var.name <- "x"; assign(var.name, 5)
) e quero alterar o valor para 6. Se estou escrevendo um script e não sei com antecedência qual será o nome da variável (var.name
) (o que parece ser o ponto doassign
função), não posso simplesmente colocarx <- 6
porquevar.name
poderia ter sido"y"
. Então eu faço:x
será alterado para 6 e, se o nome da variável for diferente"x"
, essa variável também será alterada para 6.fonte
Eu estava trabalhando nisso há alguns dias e percebi que às vezes você precisará usar a
get()
função para imprimir os resultados da sua variável. ie:A partir daí, se você tentar imprimir a variável
varnames[1]
, ela retornará 'jan'. Para contornar isso, você precisa fazerprint(get(varnames[1]))
fonte
Talvez eu não tenha entendido direito o seu problema, pela simplicidade do seu exemplo. No meu entendimento, você tem uma série de instruções armazenadas em vetores de caracteres e essas instruções estão muito próximas de serem formatadas corretamente, exceto que você gostaria de converter o membro certo para numérico.
Se meu entendimento estiver correto, gostaria de propor uma abordagem um pouco diferente, que não dependa da divisão de sua corda original, mas avalie diretamente sua instrução (com uma pequena melhoria).
Basicamente, o que estamos fazendo é que 'melhorar' a sua instrução
variable_name="10"
para que se tornevariable_name="10" %>% as.numeric
, o que é um equivalente dovariable_name=as.numeric("10")
commagrittr
sintaxe tubulação-stream. Em seguida, avaliamos essa expressão no ambiente atual.Espero que ajude alguém que vagou por aqui 8 anos depois ;-)
fonte
Se você deseja converter string em variável dentro do corpo da função, mas deseja ter uma variável global:
fonte