Преобразование строки в имя переменной

Простое объяснение: Рассмотрите for оператор

for item in iterable:
   do_stuff()

Много времени, все объекты в iterable не должны быть там от запуска, но могут быть сгенерированы на лету, поскольку они требуются. Это может быть намного более эффективно в оба

  • пространство (Вы никогда не должны хранить все объекты одновременно), и
  • время (повторение может закончиться, прежде чем все объекты необходимы).

Другие времена, Вы даже не знаете всех объектов загодя. Например:

for command in user_input():
   do_stuff_with(command)

у Вас нет способа знать команды всего пользователя заранее, но можно использовать хороший цикл как это, если у Вас есть генератор, вручающий Вам команды:

def user_input():
    while True:
        wait_for_command()
        cmd = get_command()
        yield cmd

С генераторами у Вас может также быть повторение по бесконечным последовательностям, которое, конечно, не возможно при итерации по контейнерам.

88
задан zx8754 25 May 2017 в 07:26
поделиться

1 ответ

Возможно, я не понял Вашего проблемного права из-за простоты Вашего примера. К моему пониманию у Вас есть ряд инструкций, сохраненных в символьных векторах, и те инструкции очень близко к тому, чтобы быть правильно отформатированным, за исключением того, что требуется бросить правильного участника к числовому.

, Если бы мое понимание является правильным, я хотел бы предложить немного отличающийся подход, который не полагается на разделение Вашей исходной строки, но непосредственно оценивает Вашу инструкцию (с небольшим улучшением).

original_string <- "variable_name=\"10\"" # Your original instruction, but with an actual numeric on the right, stored as character.
library(magrittr) # Or library(tidyverse), but it seems a bit overkilled if the point is just to import pipe-stream operator
eval(parse(text=paste(eval(original_string), "%>% as.numeric")))
print(variable_name)
#[1] 10

В основном, то, что мы делаем, - то, что мы 'улучшаем' Вашу инструкцию variable_name="10" так, чтобы это стало variable_name="10" %>% as.numeric, который является эквивалентом variable_name=as.numeric("10") с magrittr синтаксис потока канала. Тогда мы оцениваем это выражение в текущей среде.

Hope, которая помогает кому-то, кто блуждал бы здесь 8 лет спустя;-)

0
ответ дан 24 November 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: