Por algum motivo (irrelevante para esta pergunta), dei uma olhada rápida no pacote pryr do Hadley, onde me deparei com algo peculiar. Minha pergunta é sobre a função "where", cujo código é assim:
where
function (name, env = parent.frame())
{
stopifnot(is.character(name), length(name) == 1)
env <- to_env(env)
if (identical(env, emptyenv())) {
stop("Can't find ", name, call. = FALSE)
}
if (exists(name, env, inherits = FALSE)) {
env
}
else {
where(name, parent.env(env))
}
}
O que acho estranho está na quarta linha ( env <- to_env(env) ), que implica que existe uma função chamada "to_env". No entanto, não existe tal função, pelo menos nenhuma que eu consiga encontrar. Mesmo assim, o código funciona (por quê?). Tentei replicar a função com um nome diferente, mas o código não funciona (claro!).
Acho que estou esquecendo algo fundamental aqui, algo que não encontrei em toda a minha (não tão curta) carreira como R. Alguém pode me ajudar?
getAnywhere
é uma função útil para encontrar funções que estão ocultas em namespaces de pacotes :Você também pode usar
pryr:::to_env
(três dois pontos) para ver a função.Ou, como
pryr
está hospedado no GitHub, você pode ir ao site do GitHub, pesquisar na barra de pesquisa e encontrar o código-fonte aqui . (Você também pode baixar o tarball do código-fonte do CRAN e descompactá-lo, mas o GitHub é mais fácil para uma olhada rápida.) O código-fonte original às vezes terá comentários úteis que não são impressos do objeto de código, embora, neste caso, o código-fonte não diga nada de novo que a impressão da função já não mostre.