diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index ebcf2a9..3ac34c8 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -6,8 +6,8 @@ We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity and -orientation. +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. @@ -21,25 +21,25 @@ community include: * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, -and learning from the experience + and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall -community + community Examples of unacceptable behavior include: -* The use of sexualized language or imagery, and sexual attention or -advances of any kind +* The use of sexualized language or imagery, and sexual attention or advances of + any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment -* Publishing others' private information, such as a physical or email -address, without their explicit permission +* Publishing others' private information, such as a physical or email address, + without their explicit permission * Other conduct which could reasonably be considered inappropriate in a -professional setting + professional setting ## Enforcement Responsibilities -Community leaders are responsible for clarifying and enforcing our standards -of acceptable behavior and will take appropriate and fair corrective action in +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. @@ -50,16 +50,16 @@ decisions when appropriate. ## Scope -This Code of Conduct applies within all community spaces, and also applies -when an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail -address, posting via an official social media account, or acting as an appointed +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at codeofconduct@rstudio.com. +reported to the community leaders responsible for enforcement at codeofconduct@posit.co. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the @@ -114,13 +114,13 @@ community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.0, -available at . +version 2.1, available at +. -Community Impact Guidelines were inspired by [Mozilla's code of conduct -enforcement ladder](https://github.com/mozilla/diversity). - -[homepage]: https://www.contributor-covenant.org +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][https://github.com/mozilla/inclusion]. For answers to common questions about this code of conduct, see the FAQ at . Translations are available at . + +[homepage]: https://www.contributor-covenant.org diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index ea92ece..76cb95d 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,8 +1,7 @@ # Contributing to tidytab -This outlines how to propose a change to tidytab. -For more detailed info about contributing to this, and other tidyverse packages, please see the -[**development contributing guide**](https://rstd.io/tidy-contrib). +This outlines how to propose a change to tidytab. +For a detailed discussion on contributing to tidytab, please see the tidyverse team's [development contributing guide](https://rstd.io/tidy-contrib) and [code review principles](https://code-review.tidyverse.org/). ## Fixing typos @@ -15,6 +14,7 @@ You can find the `.R` file that generates the `.Rd` by reading the comment in th If you want to make a bigger change, it's a good idea to first file an issue and make sure someone from the team agrees that it’s needed. If you’ve found a bug, please file an issue that illustrates the bug with a minimal [reprex](https://www.tidyverse.org/help/#reprex) (this will also help you write a unit test, if needed). +See our guide on [how to create a great issue](https://code-review.tidyverse.org/issues/) for more advice. ### Pull request process diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE/issue_template.md similarity index 69% rename from .github/ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE/issue_template.md index 651066c..d7c9eba 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -1,8 +1,13 @@ +--- +name: Bug report or feature request +about: Describe a bug you've seen or make a case for a new feature +--- + Please briefly describe your problem and what output you expect. If you have a question, please don't use this form. Instead, ask on or . Please include a minimal reproducible example (AKA a reprex). If you've never heard of a [reprex](http://reprex.tidyverse.org/) before, start by reading . ---- +For more advice on how to write a great issue, see . Brief description of the problem diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md new file mode 100644 index 0000000..42a4b9c --- /dev/null +++ b/.github/SUPPORT.md @@ -0,0 +1,35 @@ +# Getting help with tidytab + +Thanks for using tidytab! +Before filing an issue, there are a few places to explore and pieces to put together to make the process as smooth as possible. + +## Make a reprex + +Start by making a minimal **repr**oducible **ex**ample using the [reprex](https://reprex.tidyverse.org/) package. +If you haven't heard of or used reprex before, you're in for a treat! +Seriously, reprex will make all of your R-question-asking endeavors easier (which is a pretty incredible ROI for the five to ten minutes it'll take you to learn what it's all about). +For additional reprex pointers, check out the [Get help!](https://www.tidyverse.org/help/) section of the tidyverse site. + +## Where to ask? + +Armed with your reprex, the next step is to figure out [where to ask](https://www.tidyverse.org/help/#where-to-ask). + +* If it's a question: start with [community.rstudio.com](https://community.rstudio.com/), and/or StackOverflow. There are more people there to answer questions. + +* If it's a bug: you're in the right place, [file an issue](https://github.com/gvelasq/tidytab/issues/new). + +* If you're not sure: let the community help you figure it out! + If your problem _is_ a bug or a feature request, you can easily return here and report it. + +Before opening a new issue, be sure to [search issues and pull requests](https://github.com/gvelasq/tidytab/issues) to make sure the bug hasn't been reported and/or already fixed in the development version. +By default, the search will be pre-populated with `is:issue is:open`. +You can [edit the qualifiers](https://help.github.com/articles/searching-issues-and-pull-requests/) (e.g. `is:pr`, `is:closed`) as needed. +For example, you'd simply remove `is:open` to search _all_ issues in the repo, open or closed. + +## What happens next? + +To be as efficient as possible, development of tidyverse packages tends to be very bursty, so you shouldn't worry if you don't get an immediate response. +Typically we don't look at a repo until a sufficient quantity of issues accumulates, then there’s a burst of intense activity as we focus our efforts. +That makes development more efficient because it avoids expensive context switching between problems, at the cost of taking longer to get back to you. +This process makes a good reprex particularly important because it might be multiple months between your initial report and when we start working on it. +If we can’t reproduce the bug, we can’t fix it! diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index baf0496..402e259 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -1,4 +1,4 @@ -# Workflow derived from https://github.com/r-lib/actions/tree/master/examples +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: push: @@ -18,7 +18,7 @@ jobs: fail-fast: false matrix: config: - - {os: macOS-latest, r: 'release'} + - {os: macos-latest, r: 'release'} - {os: windows-latest, r: 'release'} - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'} - {os: ubuntu-latest, r: 'release'} @@ -29,18 +29,22 @@ jobs: R_KEEP_PKG_SOURCE: yes steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: r-lib/actions/setup-pandoc@v1 + - uses: r-lib/actions/setup-pandoc@v2 - - uses: r-lib/actions/setup-r@v1 + - uses: r-lib/actions/setup-r@v2 with: r-version: ${{ matrix.config.r }} http-user-agent: ${{ matrix.config.http-user-agent }} use-public-rspm: true - - uses: r-lib/actions/setup-r-dependencies@v1 + - uses: r-lib/actions/setup-r-dependencies@v2 with: - extra-packages: rcmdcheck + extra-packages: any::rcmdcheck + needs: check - - uses: r-lib/actions/check-r-package@v1 + - uses: r-lib/actions/check-r-package@v2 + with: + upload-snapshots: true + build_args: 'c("--no-manual","--compact-vignettes=gs+qpdf")' diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index f9a019e..9c5e063 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -1,8 +1,10 @@ -# Workflow derived from https://github.com/r-lib/actions/tree/master/examples +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: push: branches: [main] + pull_request: + branches: [main] release: types: [published] workflow_dispatch: @@ -12,24 +14,35 @@ name: pkgdown jobs: pkgdown: runs-on: ubuntu-latest + # Only restrict concurrency for non-PR jobs + concurrency: + group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }} env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: r-lib/actions/setup-pandoc@v1 + - uses: r-lib/actions/setup-pandoc@v2 - - uses: r-lib/actions/setup-r@v1 + - uses: r-lib/actions/setup-r@v2 with: use-public-rspm: true - - uses: r-lib/actions/setup-r-dependencies@v1 + - uses: r-lib/actions/setup-r-dependencies@v2 with: - extra-packages: pkgdown + extra-packages: any::pkgdown, local::. needs: website - - name: Deploy package - run: | - git config --local user.name "$GITHUB_ACTOR" - git config --local user.email "$GITHUB_ACTOR@users.noreply.github.com" - Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE)' + - name: Build site + run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) + shell: Rscript {0} + + - name: Deploy to GitHub pages 🚀 + if: github.event_name != 'pull_request' + uses: JamesIves/github-pages-deploy-action@v4.5.0 + with: + clean: false + branch: gh-pages + folder: docs diff --git a/.github/workflows/pr-commands.yaml b/.github/workflows/pr-commands.yaml index 190a6c2..eea58c5 100644 --- a/.github/workflows/pr-commands.yaml +++ b/.github/workflows/pr-commands.yaml @@ -1,4 +1,4 @@ -# Workflow derived from https://github.com/r-lib/actions/tree/master/examples +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: issue_comment: @@ -14,22 +14,24 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: r-lib/actions/pr-fetch@v1 + - uses: r-lib/actions/pr-fetch@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - - uses: r-lib/actions/setup-r@v1 + - uses: r-lib/actions/setup-r@v2 with: use-public-rspm: true - - uses: r-lib/actions/setup-r-dependencies@v1 + - uses: r-lib/actions/setup-r-dependencies@v2 with: - extra-packages: roxygen2 + extra-packages: any::roxygen2 + needs: pr-document - name: Document - run: Rscript -e 'roxygen2::roxygenise()' + run: roxygen2::roxygenise() + shell: Rscript {0} - name: commit run: | @@ -38,7 +40,7 @@ jobs: git add man/\* NAMESPACE git commit -m 'Document' - - uses: r-lib/actions/pr-push@v1 + - uses: r-lib/actions/pr-push@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} @@ -49,19 +51,21 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: r-lib/actions/pr-fetch@v1 + - uses: r-lib/actions/pr-fetch@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - - uses: r-lib/actions/setup-r@v1 + - uses: r-lib/actions/setup-r@v2 - name: Install dependencies - run: Rscript -e 'install.packages("styler")' + run: install.packages("styler") + shell: Rscript {0} - name: Style - run: Rscript -e 'styler::style_pkg()' + run: styler::style_pkg() + shell: Rscript {0} - name: commit run: | @@ -70,6 +74,6 @@ jobs: git add \*.R git commit -m 'Style' - - uses: r-lib/actions/pr-push@v1 + - uses: r-lib/actions/pr-push@v2 with: repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index d5ebd8e..1269288 100644 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -1,4 +1,4 @@ -# Workflow derived from https://github.com/r-lib/actions/tree/master/examples +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: push: @@ -15,16 +15,36 @@ jobs: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: r-lib/actions/setup-r@v1 + - uses: r-lib/actions/setup-r@v2 with: use-public-rspm: true - - uses: r-lib/actions/setup-r-dependencies@v1 + - uses: r-lib/actions/setup-r-dependencies@v2 with: - extra-packages: covr + extra-packages: any::covr + needs: coverage - name: Test coverage - run: covr::codecov() + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package") + ) shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures + path: ${{ runner.temp }}/package diff --git a/DESCRIPTION b/DESCRIPTION index 40586e8..38a39ee 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -37,4 +37,4 @@ Config/testthat/edition: 3 Encoding: UTF-8 LazyData: true Roxygen: list(markdown = TRUE) -RoxygenNote: 7.1.2 +RoxygenNote: 7.3.1 diff --git a/LICENSE b/LICENSE index 4fd1eae..351a03e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,2 +1,2 @@ -YEAR: 2017 +YEAR: 2024 COPYRIGHT HOLDER: tidytab authors diff --git a/LICENSE.md b/LICENSE.md index 0d3056e..040badf 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # MIT License -Copyright (c) 2017 tidytab authors +Copyright (c) 2024 tidytab authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/R/br.R b/R/br.R index e8e5440..a92468e 100644 --- a/R/br.R +++ b/R/br.R @@ -14,6 +14,10 @@ br <- function(x, title) { if (title_expr == "") { title_expr <- rlang::quo_name(rlang::enexpr(x)) } - if (!interactive()) return(invisible(x)) else get("View", envir = as.environment("package:utils"))(x, title = title_expr) + if (!interactive()) { + return(invisible(x)) + } else { + get("View", envir = as.environment("package:utils"))(x, title = title_expr) + } invisible(x) } diff --git a/R/gin.R b/R/gin.R index 95ea704..a54af33 100644 --- a/R/gin.R +++ b/R/gin.R @@ -2,7 +2,6 @@ #' #' @name %gin% #' @rdname gin -#' @rdname \%gin\% #' #' @description #' \code{\%gin\%} is a reimagination of \code{\%in\%} using `grepl()` for partial string matching. diff --git a/R/statascii.R b/R/statascii.R index 951f969..d459836 100644 --- a/R/statascii.R +++ b/R/statascii.R @@ -58,8 +58,7 @@ statascii <- function(df, ..., flavor = "oneway", padding = "stata", separators table_captured <- as.matrix(readLines(con)) close(con) wrap_tbl(table_captured, M = M, M1 = M1) - } - else if (flavor == "twoway") { + } else if (flavor == "twoway") { table_line <- add_line(M2) group_dashes <- add_dash(M2) total_line <- nrow(df) - 1L @@ -82,8 +81,7 @@ statascii <- function(df, ..., flavor = "oneway", padding = "stata", separators table_captured <- as.matrix(readLines(con)) close(con) wrap_tbl(table_captured, M = M, M1 = M1) - } - else if (flavor == "contingency") { + } else if (flavor == "contingency") { top_row <- vector(mode = "character", length = length(colnames(df))) top_row[2] <- topvar table_line <- add_line(M2) @@ -103,8 +101,7 @@ statascii <- function(df, ..., flavor = "oneway", padding = "stata", separators table_captured <- as.matrix(readLines(con)) close(con) wrap_tbl(table_captured, M = M, M1 = M1) - } - else if (flavor == "summary") { + } else if (flavor == "summary") { table_line <- add_line(M1) group_dashes <- add_dash(M1) con <- file() @@ -200,17 +197,17 @@ wrap_tbl <- function(tbl, M = M, M1 = M1, width = getOption("width")) { } add_line <- function(n) { - tmp <- purrr::map_chr(n, ~paste0(rep(color_grey(u2500), . + 2L), collapse = "")) + tmp <- purrr::map_chr(n, ~ paste0(rep(color_grey(u2500), . + 2L), collapse = "")) paste0(color_grey(u2500), paste0(tmp, collapse = color_grey(u253c))) } add_dash <- function(n) { - tmp <- purrr::map_chr(n, ~paste0(rep(color_grey("-"), . + 2L), collapse = "")) + tmp <- purrr::map_chr(n, ~ paste0(rep(color_grey("-"), . + 2L), collapse = "")) paste0(color_grey("-"), paste0(tmp, collapse = color_grey(u253c))) } add_row_oneway <- function(x, n) { - row_content <- purrr::map2_chr(x, seq_along(x), ~sprintf(paste0("%", n[.y], "s"), .x)) + row_content <- purrr::map2_chr(x, seq_along(x), ~ sprintf(paste0("%", n[.y], "s"), .x)) paste0( paste0(paste0(" ", row_content[1], " "), collapse = ""), color_grey(u2502), @@ -220,7 +217,7 @@ add_row_oneway <- function(x, n) { } add_row_twoway <- function(x, n) { - row_content <- purrr::map2_chr(x, seq_along(x), ~sprintf(paste0("%", n[.y], "s"), .x)) + row_content <- purrr::map2_chr(x, seq_along(x), ~ sprintf(paste0("%", n[.y], "s"), .x)) paste0( paste0(paste0(" ", row_content[1], " "), collapse = ""), color_grey(u2502), diff --git a/R/tab.R b/R/tab.R index e2f7f06..d84ebe3 100644 --- a/R/tab.R +++ b/R/tab.R @@ -92,8 +92,7 @@ tab <- function(x, ..., m = TRUE) { } if (length(vars) == 0L) { df_to_return <- ftab(x, ..., m = m) - } - else { + } else { vars <- lapply(vars, rlang::env_bury, !!!helpers) varnames <- tidyselect::vars_select(names(x), !!!vars) if (length(varnames) == 1L | length(varnames) > 2L) { @@ -129,8 +128,7 @@ ftab <- function(x, ..., m = TRUE) { x <- dplyr::count(x, .data[["value"]]) x <- dplyr::rename(x, !!x_name := .data[["value"]], Freq. = .data[["n"]]) } - } - else { + } else { vars <- lapply(vars, rlang::env_bury, !!!helpers) varnames <- tidyselect::vars_select(names(x), !!!vars) x <- dplyr::select(x, !!!varnames) @@ -147,8 +145,7 @@ ftab <- function(x, ..., m = TRUE) { x[nrow(x) - 1L, ncol(x)] <- "100.0" x <- tibble::as_tibble(x) statascii(x, flavor = "oneway") - } - else if (ncol(x) > 4) { + } else if (ncol(x) > 4) { x <- tibble::as_tibble(x) statascii(x, flavor = "summary", separators = TRUE) } diff --git a/README.Rmd b/README.Rmd index 4fca892..c488baa 100644 --- a/README.Rmd +++ b/README.Rmd @@ -18,7 +18,7 @@ knitr::opts_chunk$set( > Create tidyverse-friendly tables of frequencies -[![R-CMD-check](https://github.com/gvelasq/tidytab/workflows/R-CMD-check/badge.svg)](https://github.com/gvelasq/tidytab/actions) +[![R-CMD-check](https://github.com/gvelasq/tidytab/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/gvelasq/tidytab/actions/workflows/R-CMD-check.yaml) [![Codecov test coverage](https://codecov.io/gh/gvelasq/tidytab/branch/main/graph/badge.svg)](https://codecov.io/gh/gvelasq/tidytab?branch=main) [![CRAN status](https://www.r-pkg.org/badges/version/tidytab)](https://cran.r-project.org/package=tidytab) [![R-universe status](https://gvelasq.r-universe.dev/badges/tidytab)](https://gvelasq.r-universe.dev/tidytab) diff --git a/README.md b/README.md index 3d8c0e7..46602a5 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ -[![R-CMD-check](https://github.com/gvelasq/tidytab/workflows/R-CMD-check/badge.svg)](https://github.com/gvelasq/tidytab/actions) +[![R-CMD-check](https://github.com/gvelasq/tidytab/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/gvelasq/tidytab/actions/workflows/R-CMD-check.yaml) [![Codecov test coverage](https://codecov.io/gh/gvelasq/tidytab/branch/main/graph/badge.svg)](https://codecov.io/gh/gvelasq/tidytab?branch=main) [![CRAN diff --git a/cran-comments.md b/cran-comments.md index 86541ef..858617d 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,8 +1,3 @@ -## Test environments -* local OS X install, R 3.4.3 -* ubuntu 14.04 (on travis-ci), R 3.4.3 -* win-builder (devel and release) - ## R CMD check results 0 errors | 0 warnings | 1 note diff --git a/man/tidytab-package.Rd b/man/tidytab-package.Rd index 0e0616f..17fa696 100644 --- a/man/tidytab-package.Rd +++ b/man/tidytab-package.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/tabr-package.R +% Please edit documentation in R/tidytab-package.R \docType{package} \name{tidytab-package} \alias{tidytab} @@ -12,6 +12,7 @@ Functions to create tables of frequencies. Useful links: \itemize{ \item \url{https://github.com/gvelasq/tidytab} + \item \url{https://gvelasq.github.io/tidytab/} \item Report bugs at \url{https://github.com/gvelasq/tidytab/issues} } diff --git a/tests/testthat.R b/tests/testthat.R index 5ad94d3..84134d5 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -1,3 +1,11 @@ +# This file is part of the standard setup for testthat. +# It is recommended that you do not modify it. +# +# Where should you do additional test configuration? +# Learn more about the roles of various files in: +# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview +# * https://testthat.r-lib.org/articles/special-files.html + library(testthat) library(tidytab)