Usando o pacote de importação com drake
Saber mais sobre o drakepacote foi uma das melhores descobertas recentes como um usuário R. No entanto, uma desvantagem que vejo no pacote em termos de reprodutibilidade é a desordem do espaço de trabalho com funções que são meramente auxiliares.
Ninguém sabe se essas sourcefunções d entram em conflito ou se a ordem das librarychamadas é importante. Eu sei que existe o conflictedpacote, mas ele trata apenas de pacotes. Eu sei que a unidade de código em R deve ser um pacote, mas parece estranho ter uma análise com um punhado de arquivos como preprocessing.R, training.Re transformá-los em um pacote. Potenciais conflitos de nomes começam bem cedo de qualquer maneira, e eu nunca vi ninguém apresentando uma abordagem limpa para R.
Existe, no entanto, o importpacote que permite selecionar a importação de funções de pacote e funções / variáveis de outros arquivos. Digamos que você tenha uma função aem e a.R, em seguida, importá-la usando importa função é acessível, mas todas as suas dependências estão disponíveis para a função, amas não importadas, fornecendo isolamento útil.
Testei o uso do importpacote com drake, mas drakenão detectei se as dependências das funções importadas mudam, interrompendo seu caso de uso real. Alguém conhece uma maneira de dizer ao drake para "detalhar" essas funções, ou qualquer outra maneira de fazer funcionar? Desde já, obrigado!
Respostas
Por design, drakerastreia apenas as funções no ambiente de make(), que você pode definir com o envirargumento (mais funções com espaço de nomes chamadas com pkg::fun(), mas foi um erro construir esse recurso). enviré apenas o ambiente de chamada por padrão ( parent.frame()). Portanto, quando você usar import::from(), certifique-se de definir .intoigual a ""para que ele traga as coisas para drakeo ambiente de.
ls()
#> character(0)
import::from(dplyr, mutate, .into = "")
ls()
#> [1] "mutate"
library(drake)
plan <- drake_plan(x = mutate(mtcars, x = 1))
vis_drake_graph(plan)
Criado em 2020-09-05 pelo pacote reprex (v0.3.0)
Aliás, você apenas entregou-nos uma excelente alternativa para envir = getNamespace("yourPackage")partirhttps://github.com/ropensci/drake/issues/1286#issuecomment-649088321, o último dos quais é limitado se você deseja extrair funções de várias fontes. Então, obrigado! Vamos espalhar a palavra sobre essa solução alternativa.