Używam języka R do analizowania listy ciągów w postaci:
original_string <- "variable_name=variable_value"
Najpierw wyodrębniam nazwę zmiennej i wartość z oryginalnego ciągu i konwertuję wartość na klasę numeryczną.
parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"
Następnie chciałbym przypisać wartość zmiennej o takiej samej nazwie, jak łańcuch nazwa_parametru.
variable_name <- parameter_value
Jakie są funkcje w tym celu?
Możesz użyć do.call:
źródło
<-
jest to funkcja sama w sobie.Jest tam inne proste rozwiązanie: http://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-vice-versa-in-r/
Aby przekształcić ciąg w zmienną:
I odwrotnie:
źródło
użyj
x=as.name("string")
możesz użyć, a następnie użyj,x
aby odwołać się do zmiennej o nazwie łańcuchowej.Nie wiem, czy poprawnie odpowiada na twoje pytanie
źródło
x=as.symbol("string")
Funkcja, której szukasz, to
get()
:Potwierdzenie, że adres pamięci jest identyczny:
Odniesienie: R FAQ 7.21 Jak zamienić ciąg znaków w zmienną?
źródło
x <- 42; deparse(substitute(x))
strsplit
aby przeanalizować dane wejściowe i, jak wspomniał Greg,assign
przypisać zmienne.źródło
assign
jest dobry, ale nie znalazłem funkcji odwołującej się do zmiennej, którą utworzyłeś w automatycznym skrypcie. (as.name
wydaje się działać w drugą stronę). Bardziej doświadczeni programiści bez wątpienia będą mieli lepsze rozwiązanie, ale to rozwiązanie działa i być może jest nieco zabawne, ponieważ zmusza R do napisania kodu do wykonania.Powiedzmy, że właśnie przypisałem wartość 5 do
x
(var.name <- "x"; assign(var.name, 5)
) i chcę zmienić wartość na 6. Jeśli piszę skrypt i nie wiem z góry, jaka będzie nazwa zmiennej (var.name
) (co wydaje się być celemassign
funkcja), nie mogę po prostu podać,x <- 6
ponieważvar.name
mogło tak być"y"
. Ja również:x
zostanie zmieniona na 6, a jeśli nazwa zmiennej była inna niż"x"
, ta zmienna podobnie zostanie zmieniona na 6.źródło
Pracowałem nad tym kilka dni temu i zauważyłem, że czasami będziesz musiał użyć
get()
funkcji, aby wydrukować wyniki swojej zmiennej. tj .:Stamtąd, jeśli spróbujesz wydrukować zmienną
varnames[1]
, zwraca ona „jan”. Aby obejść ten problem, musisz zrobićprint(get(varnames[1]))
źródło
Może nie zrozumiałem twojego problemu dobrze, z powodu prostoty twojego przykładu. Według mojego rozumienia, masz serię instrukcji przechowywanych w wektorach znakowych, a instrukcje te są bardzo bliskie poprawnego sformatowania, z wyjątkiem tego, że chciałbyś rzutować właściwy element na numeryczny.
Jeśli dobrze rozumiem, chciałbym zaproponować nieco inne podejście, które nie polega na dzieleniu oryginalnego ciągu, ale bezpośrednio ocenia twoją instrukcję (z niewielką poprawą).
Zasadniczo to, co robimy, polega na tym, że „poprawiamy” Twoje instrukcje,
variable_name="10"
tak aby stały sięvariable_name="10" %>% as.numeric
, co jest odpowiednikiemvariable_name=as.numeric("10")
zmagrittr
składnią rura strumienia. Następnie oceniamy to wyrażenie w obecnym środowisku.Mam nadzieję, że pomoże to komuś, kto wędrowałby tu 8 lat później ;-)
źródło
Jeśli chcesz przekonwertować ciąg znaków na zmienną w treści funkcji, ale chcesz mieć zmienną globalną:
źródło