R Academy · Aula

Submissão ao CRAN e manutenção de pacotes

Execute R CMD check, resolva problemas NOTE/WARNING e envie o pacote ao CRAN.

Aula 4 de 413 etapas

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 -20

devtools::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-hub
  • devtools::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 releases

GitHub 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 checks

Lidando 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()  # resubmit

Manutençã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.gz
  • devtools::release() — envio interativo e orientado
  • Verificações em várias plataformas: check_win_devel(), R-hub
  • NEWS.md com títulos de versão; atualize com use_version('minor')
  • GitHub Actions com r-lib/actions para integração contínua a cada envio
  • Responda ao feedback dos revisores em até 14 dias
Grátis para começar

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

  1. Estrutura de pacotes com usethis e devtools
  2. Documentando funções com roxygen2
  3. Testes unitários com testthat
  4. Submissão ao CRAN e manutenção de pacotes
← Voltar para R Academy