Ответ 1
На консоли script оценивается, как только строка a заканчивается полным оператором. Следовательно, это:
temp_a
temp_b <- 1
temp_c <- 2
равнозначно называть это:
source(textConnection('temp_a'))
source(textConnection('temp_b <- 1'))
source(textConnection('temp_c <- 2'))
в котором каждая строка оценивается, как только она встречается, и сбои в предыдущих строках не препятствуют оценке последующих строк. С другой стороны. это:
temp_a ; temp_b <- 1 ; temp_c <- 2
эквивалентно вызову этого:
source(textConnection('temp_a ; temp_b <- 1 ; temp_c <- 2'))
что эквивалентно этому
source(textConnection('
temp_a
temp_b <- 1
temp_c <- 2'))
потому что, когда первая строка выходит из строя, оставшаяся часть кода не запускается.
Кстати, если вы хотите воспроизвести это поведение на консоли, вы можете воспользуйтесь тем фактом, что линии не оцениваются до тех пор, пока они не полное утверждение, окружая три строки фигурными скобками, чтобы сделать единый кодовый блок, который оценивается как целое, например:
{
temp_a
temp_b <- 1
temp_c <- 2
}