Alguém poderia me explicar por que usar uma chamada de função como argumento padrão falha quando o nome da função é o mesmo que o nome do argumento?
f1 <- function(){
2
}
f2 <- function(f1 = f1()){
f1 * 2
}
f2()
#> Error in f2(): promise already under evaluation: recursive default argument reference or earlier problems?
Entendo que a função pode ser feita funcionar (1) renomeando a função f1
ou (2) renomeando o argumento para f2
(veja abaixo), mas não consigo entender por que essas correções funcionam, enquanto o caso com nomes alinhados falha. Também entendo que muitos considerariam esse tipo de nomenclatura inadequada, mas, para os propósitos desta pergunta, estou interessado nos processos subjacentes a esse erro, não na deficiência de estilo associada.
Correção 1
f <- function(){
2
}
f2 <- function(f1 = f()){
f1 * 2
}
f2()
#> [1] 4
Correção 2
f1 <- function(){
2
}
f2 <- function(.f1 = f1()){
.f1 * 2
}
f2()
#> [1] 4
Agradeço desde já a sua ajuda.