Я использую R для анализа списка строк в форме:
original_string <- "variable_name=variable_value"
Сначала я извлекаю имя и значение переменной из исходной строки и конвертирую значение в числовой класс.
parameter_value <- as.numeric("variable_value")
parameter_name <- "variable_name"
Затем я хотел бы присвоить значение переменной с тем же именем, что и строка parameter_name.
variable_name <- parameter_value
Каковы функции для этого?
Вы можете использовать do.call:
источник
<-
это сама функция.Там есть еще одно простое решение: http://www.r-bloggers.com/converting-a-string-to-a-variable-name-on-the-fly-and-vice-versa-in-r/
Чтобы преобразовать строку в переменную:
И наоборот:
источник
используйте
x=as.name("string")
вы можете использовать затем использоватьx
для ссылки на переменную со строкой имени.Я не знаю, правильно ли он отвечает на ваш вопрос
источник
x=as.symbol("string")
Функция, которую вы ищете
get()
:Подтверждение идентичности адреса памяти:
Ссылка: R FAQ 7.21 Как преобразовать строку в переменную?
источник
x <- 42; deparse(substitute(x))
strsplit
для анализа вашего ввода и, как упоминал Грег,assign
для присвоения переменных.источник
assign
это хорошо, но я не нашел функции для возврата к переменной, которую вы создали в автоматическом скрипте. (as.name
похоже, работает наоборот). У более опытных программистов, несомненно, будет лучшее решение, но это решение работает и, возможно, немного юмористично, поскольку заставляет R писать код для себя для выполнения.Скажем, я только что присвоил
x
(var.name <- "x"; assign(var.name, 5)
) значение 5 и хочу изменить это значение на 6. Если я пишу сценарий и не знаю заранее, каким будет имя переменной (var.name
) (что, кажется, является точкойassign
функция), я не могу просто сказать,x <- 6
потому чтоvar.name
могло быть"y"
. Итак, я делаю:x
будет изменено на 6, и если имя переменной было любым, кроме"x"
, эта переменная аналогичным образом будет изменена на 6.источник
Я работал с этим несколько дней назад и заметил, что иногда вам нужно будет использовать
get()
функцию для печати результатов вашей переменной. то есть:Оттуда, если вы попытаетесь распечатать переменную
varnames[1]
, она вернет jan. Чтобы обойти это, вам нужно сделатьprint(get(varnames[1]))
источник
Возможно, я неправильно понял вашу проблему из-за простоты вашего примера. Насколько я понимаю, у вас есть ряд инструкций, хранящихся в символьных векторах, и эти инструкции очень близки к правильному форматированию, за исключением того, что вы хотите преобразовать правильный член в числовой.
Если я правильно понимаю, я хотел бы предложить немного другой подход, который не полагается на разделение исходной строки, а непосредственно оценивает вашу инструкцию (с небольшим улучшением).
В принципе, то , что мы делаем, что мы «улучшить» вашу инструкцию
variable_name="10"
так , что она становитсяvariable_name="10" %>% as.numeric
, что является эквивалентомvariable_name=as.numeric("10")
сmagrittr
синтаксисом трубы потока. Затем мы оцениваем это выражение в текущей среде.Надеюсь, это поможет тому, кто будет бродить здесь 8 лет спустя ;-)
источник
Если вы хотите преобразовать строку в переменную внутри тела функции, но хотите иметь глобальную переменную:
источник