I недавно обнаружил , что вы можете условно присвоить значение с помощью блока if-else.
y <- if(condition) 1 else 2
Я понимаю, что сценарий использования для этого ограничен: если у вас есть векторизованный код, вы бы вместо этого использовали функцию ifelse
. Есть выигрыш в производительности: if-else
работает примерно в 35 раз быстрее, чем ifelse
в скалярном случае на моей машине (хотя вам нужно вызывать его миллионы раз, чтобы заметить большую разницу).
Что меня беспокоит, так это то, что я не могу понять, почему этот код работает - я был поражен, что он не просто выдает ошибку.
Другой пример показывает, что если блоки ведут себя как функции & mdash; они автоматически возвращают последнее значение в блоке (хотя в них нельзя использовать оператор return
).
y <- if(TRUE)
{
y <- 3
4
} # y is 4
Исходя из этого, я догадался, что, возможно, при вводе блока if была создана другая среда, но, похоже, это не так.
if(TRUE) sys.frames() # NULL
Может кто-нибудь сказать мне, что происходит под капотом, пожалуйста?