Localizando e substituindo facilmente todas as correspondências em uma lista aninhada

Tome este objeto como um exemplo:

expr <- substitute(mean(exp(sqrt(.)), .))

É uma lista aninhada. Eu quero encontrar todos os elementos que correspondamquote(.).

Por exemplo,magrittrA solução corresponde apenas ao primeiro nível da chamada:

dots <- c(FALSE, vapply(expr[-1], identical, quote(.), 
                        FUN.VALUE = logical(1)))
dots
[1] FALSE FALSE  TRUE

Mas eu queria encontrar todos os "." em uma lista aninhada arbitrária. Nesse caso em particular, seriam esses dois pontos:

expr[[3]]
expr[[2]][[2]][[2]]

E então esses pontos devem ser substituídos:

expr[[3]] <- as.name("replacement")
expr[[2]][[2]][[2]] <- as.name("replacement")
expr
# mean(exp(sqrt(replacement)), replacement)

Como você faria isso?

questionAnswers(1)

yourAnswerToTheQuestion