Простое объяснение: Рассмотрите 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
С генераторами у Вас может также быть повторение по бесконечным последовательностям, которое, конечно, не возможно при итерации по контейнерам.
Возможно, я не понял Вашего проблемного права из-за простоты Вашего примера. К моему пониманию у Вас есть ряд инструкций, сохраненных в символьных векторах, и те инструкции очень близко к тому, чтобы быть правильно отформатированным, за исключением того, что требуется бросить правильного участника к числовому.
, Если бы мое понимание является правильным, я хотел бы предложить немного отличающийся подход, который не полагается на разделение Вашей исходной строки, но непосредственно оценивает Вашу инструкцию (с небольшим улучшением).
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 лет спустя;-)