Submissão ao CRAN e manutenção de pacotes
Execute R CMD check, resolva problemas NOTE/WARNING e envie o pacote ao CRAN.
Submissão ao CRAN e manutenção de pacotes é uma aula grátis de R Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.
O processo de envio ao CRAN
CRAN (Comprehensive R Archive Network) é o repositório oficial de pacotes R. Enviar um pacote exige que ele passe por verificações automatizadas e por uma análise humana com base em políticas rigorosas. O processo é: preparar → verificar → criar o pacote → enviar → revisar com base no feedback.
devtools::check() — zero erros e avisos
Antes do envio, devtools::check() deve produzir 0 ERROs e 0 AVISOs. NOTEs são permitidas, mas devem ser minimizadas. Problemas comuns detectados pela verificação:
- Funções ou argumentos sem documentação
- Importações de pacotes ausentes em DESCRIPTION
- Exemplos que geram erros ou demoram demais
- Uso de variáveis globais (use
utils::globalVariables())
# devtools::check() # or Ctrl+Shift+E
#
# Target output:
# -- R CMD check results -------------------------
# Duration: 45.3s
# 0 errors v | 0 warnings v | 1 note x
# NOTE: New submission.
#
# 'New submission' is an expected NOTE for first-time packages.
# All actual ERRORs and WARNINGs must be fixed before submitting.Políticas do CRAN — regras principais
O CRAN aplica políticas rigorosas. Estas são as regras violadas com mais frequência:
- Não acesse a internet em exemplos, testes ou vinhetas, a menos que o acesso dependa da disponibilidade
- Tempo total dos exemplos < 5 segundos — use
\dontrun{}ou\donttest{}para exemplos lentos - Não grave no diretório pessoal do usuário — use
tempdir()nos exemplos - Não use caminhos fixos — todas as operações com arquivos devem usar caminhos relativos ou
tempdir()
# Correct: examples that write to tempdir
# #' @examples
# #' tmp <- tempfile()
# #' write.csv(mtcars, tmp)
# #' read.csv(tmp)
# #' unlink(tmp)
#
# Correct: skip slow or network examples
# #' @examples
# #' \dontrun{
# #' # slow operation
# #' fit_big_model(huge_dataset)
# #' }devtools::build() — criando o pacote de distribuição
devtools::build() cria um pacote-fonte .tar.gz (por exemplo, mypackage_0.1.0.tar.gz) adequado para envio ao CRAN. Use devtools::build(binary = TRUE) para criar um pacote binário para distribuição no seu OS local.
# devtools::build()
# => mypackage_0.1.0.tar.gz
#
# What build does:
# 1. Runs devtools::document() to regenerate man/ and NAMESPACE
# 2. Compiles vignettes (if any)
# 3. Bundles R/, man/, DESCRIPTION, NAMESPACE, tests/ etc.
# 4. Excludes files listed in .Rbuildignore
#
# Inspect the bundle:
# tar -tzf mypackage_0.1.0.tar.gz | head -20devtools::release() — envio interativo
devtools::release() executa uma lista de verificação interativa que orienta você pelas verificações finais antes do envio, solicita que confirme as políticas do CRAN e, em seguida, envia o .tar.gz para https://cran.r-project.org/submit.html usando a API web do CRAN.
# devtools::release()
#
# Interactive questions include:
# - Have you checked on R-devel?
# - Have you checked on Windows with win-builder?
# - Is there a single top-level .R file in tests/?
# - Have you removed donttest{} for essential examples?
# - Is the package correctly versioned?
#
# After answering, it submits and emails the CRAN team.Verificação em várias plataformas
O CRAN verifica pacotes em vários OS e versões do R. Faça testes abrangentes antes de enviar:
devtools::check_win_devel()— envia para o win-builder (Windows, R-devel)devtools::check_rhub()— verifica em várias plataformas Linux/Windows por meio do R-hubdevtools::check_mac_release()— verifica no macOS
# Check on Windows R-devel (submits to win-builder, results emailed):
# devtools::check_win_devel()
#
# Check on multiple platforms via R-hub:
# rhub::check_for_cran() # requires rhub package and account
#
# Minimum: check locally + win-builder before every CRAN submission
cat('CRAN checks on Windows, macOS, and multiple Linux distros
')NEWS.md — comunicando alterações
NEWS.md documenta as alterações entre versões. O CRAN exige esse arquivo para atualizações. Formate cada versão como um título com marcadores descrevendo o que mudou. Os usuários e os revisores do CRAN leem esse arquivo para entender as alterações.
# NEWS.md format:
#
# # mypackage 0.2.0
# * Added subtract() function for element-wise subtraction.
# * add() now accepts complex numbers.
# * Fixed bug where add(NA, x) returned 0 instead of NA.
#
# # mypackage 0.1.0
# * Initial CRAN release.
# * Core add() function for numeric addition.
cat('usethis::use_news_md() creates NEWS.md with the right format
')usethis::use_version() para atualizar versões
usethis::use_version('minor') incrementa o número da versão em DESCRIPTION e adiciona um novo título de espaço reservado em NEWS.md. Use versionamento semântico: major.minor.patch.
# Version bump commands:
# usethis::use_version('patch') # 0.1.0 -> 0.1.1 (bug fixes)
# usethis::use_version('minor') # 0.1.0 -> 0.2.0 (new features)
# usethis::use_version('major') # 0.1.0 -> 1.0.0 (breaking changes)
# usethis::use_version('dev') # 0.1.0 -> 0.1.0.9000 (dev suffix)
#
# CRAN packages should NOT have a dev suffix (e.g., 0.9000)
# Dev suffix signals work-in-progress on GitHub between releasesGitHub Actions para integração contínua
Automatize a verificação do R CMD a cada envio usando r-lib/actions. usethis::use_github_action('check-standard') cria um fluxo de trabalho que verifica o pacote no Ubuntu, no macOS e no Windows, usando várias versões do R.
# usethis::use_github_action('check-standard')
# Creates .github/workflows/R-CMD-check.yaml
#
# The workflow:
# - triggers on push and pull_request
# - runs on ubuntu-latest, macos-latest, windows-latest
# - tests on R release, R devel, and R oldrel
# - caches installed packages for faster runs
# - reports check results as GitHub status checksLidando com o feedback dos revisores do CRAN
Os revisores do CRAN podem solicitar alterações. Solicitações comuns:
- Envolver exemplos demorados em
\donttest{} - Usar proteções
if (interactive())para funções que abrem interfaces de usuário - Corrigir a ortografia na documentação (use
usethis::use_spell_check()) - Adicionar mensagens de erro mais descritivas
Responda prontamente e envie novamente. Várias rodadas de revisão são normais.
# Spell check DESCRIPTION and man/ pages:
# usethis::use_spell_check()
# spelling::spell_check_package() # run the check
#
# Add words to WORDLIST to ignore false positives:
# spelling::update_wordlist()
#
# After making all changes:
# devtools::check() # confirm 0 errors/warnings
# devtools::release() # resubmitManutenção do pacote após o lançamento
Após a aceitação pelo CRAN, a manutenção contínua inclui:
- Ficar atento aos avisos de obsolescência das dependências nas verificações do R-devel
- Corrigir falhas na verificação do CRAN em até 14 dias (política do CRAN)
- Usar
lifecycle::deprecate_warn()para tornar funções antigas obsoletas gradualmente - Configurar
usethis::use_github_action('pkgdown')para um site de documentação
# Mark a function as deprecated:
# library(lifecycle)
#
# old_add <- function(x, y) {
# lifecycle::deprecate_warn('0.2.0', 'old_add()', 'add()')
# add(x, y)
# }
#
# Users see: 'old_add()' was deprecated in mypackage 0.2.0.
# Please use 'add()' instead.Verificação rápida: política de exemplos do CRAN
Qual marcação deve ser usada para incluir um exemplo demorado na documentação sem que o verificador automatizado do CRAN o execute?
Recapitulação do envio e da manutenção no CRAN
O fluxo de lançamento no CRAN:
devtools::check()— exige 0 ERROs e 0 AVISOs- Políticas do CRAN: sem internet nos exemplos, exemplos com menos de 5 s, use
tempdir()para gravações devtools::build()— cria o pacote.tar.gzdevtools::release()— envio interativo e orientado- Verificações em várias plataformas:
check_win_devel(), R-hub NEWS.mdcom títulos de versão; atualize comuse_version('minor')- GitHub Actions com
r-lib/actionspara integração contínua a cada envio - Responda ao feedback dos revisores em até 14 dias
Aprenda R com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 43
- Aulas
- 159
Perguntas Frequentes
A aula “Submissão ao CRAN e manutenção de pacotes” é grátis?
Sim — o texto completo de “Submissão ao CRAN e manutenção de pacotes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.
O que vou aprender em “Submissão ao CRAN e manutenção de pacotes”?
Execute R CMD check, resolva problemas NOTE/WARNING e envie o pacote ao CRAN. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar R Academy?
Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Submissão ao CRAN e manutenção de pacotes”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de R Academy?
Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Estrutura de pacotes com usethis e devtools
- Documentando funções com roxygen2
- Testes unitários com testthat
- Submissão ao CRAN e manutenção de pacotes