se / else constrói funções internas e externas

Quando olho para as funções R, geralmente encontro a seguinte estrutura:

f <- function(exp=T) {
  if (exp)
    a <- 1
  else
    a <- 2
}
f()
f(F)

Isso será executado sem erro. Mas a execução do código da função interna gera um erro, já que R provavelmente assume que a instrução foi concluída após a primeira atribuiçãoa <- 1 e não pode lidar com o seguinte.

exp=T
if (exp)
  a <- 1
else
  a <- 2

Agora, isso faz sentido para mim, mas eu ainda gostaria de entender por que o comportamento do código executado difere quando executado dentro ou fora de uma função.

questionAnswers(2)

yourAnswerToTheQuestion