Я использую цикл, который заполняет вектор. В какой-то момент я запрашиваю ввод данных пользователем, используя base::readline
, который расположен до влияния вектора. Если я выйду из режима с помощью клавиши ESC во время командной строки, воздействие все равно будет выполнено, даже если это произойдет после этой командной строки.
Например, я бы запустил:
v1 <- character(1)
for (i in 1) {
message(i)
if (i == 1) {
user_input <- readline("say something: ")
}
v1[i] <- i
}
, и я бы ушел, используя клавишу ESC, когда консоль выдает «что-то сказать». Тогда значение вектора будет:
> v1
[1] "1"
, тогда как оно должно быть ""
, поскольку я прерываю поток перед воздействием.
Мое первоначальное предположение состояло в том, что R все еще выполняет другой оператор передвыход из циклаХотя, когда я добавляю оператор print / message прямо перед воздействием, последний не выполняется, когда я убегаю, используя клавишу ESC. Например, когда я выполняю следующую инструкцию
v2 <- character(1)
for (i in 1) {
message(i)
if (i == 1) {
user_input <- readline("say something: ")
}
message("before affectation")
v2[i] <- i
}
и использую клавишу ESC в командной строке, сообщение "before affectation"
не отображается. Еще более любопытно: воздействие на вектор не сделано (то есть значение v2 равно ""
, как и должно быть).
Кроме того, когда я добавляю функцию, у которой нет побочных эффектов (т.е. нет печати / сообщения / и т. Д.) Перед воздействием, то выполняется воздействие.
Я не могу понять эти различия в поведении. Заголовок моей информации о сеансе:
R version 3.3.0 (2016-05-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)