项目作者: r-lib

项目描述 :
Find differences between R objects
高级语言: R
项目地址: git://github.com/r-lib/waldo.git
创建时间: 2020-03-29T16:00:40Z
项目社区:https://github.com/r-lib/waldo

开源协议:Other

下载


waldo

Codecov test
coverage
R-CMD-check

The goal of waldo is to find and concisely describe the difference
between a pair of R objects, with the primary goal of making it easier
to figure out what’s gone wrong in your unit tests.

waldo::compare() is inspired by all.equal(), but takes additional
care to generate actionable insights by:

  • Ordering the differences from most important to least important.
  • Displaying the values of atomic vectors that are actually different.
  • Carefully using colour to emphasise changes (while still being
    readable when colour isn’t available).
  • Using R code (not a text description) to show where differences arise.
  • Where possible, comparing elements by name, rather than by position.
  • Erring on the side of producing too much output, rather than too
    little.

Installation

You can install the released version of waldo from
CRAN with:

  1. install.packages("waldo")

Comparisons

  1. library(waldo)

When comparing atomic vectors, compare() produces diffs (thanks to
diffobj) that highlight additions,
deletions, and changes, along with a little context:

  • Deletion

    1. compare(c("a", "b", "c"), c("a", "b"))

  • Addition

    1. compare(c("a", "b"), c("a", "b", "c"))

  • Change

    1. compare(c("a", "b", "c"), c("a", "B", "c"))

  • Long vectors with short differences only show local context around
    changes, not everything that’s the same.

    1. compare(c("X", letters), c(letters, "X"))

Depending on the relative size of the differences and the width of your
console you’ll get one of three displays:

  • The default display is to show the vectors one atop the other:

    1. compare(letters[1:5], letters[1:6])

  • If there’s not enough room for that, the two vectors are shown
    side-by-side:

    1. options(width = 20)
    2. compare(letters[1:5], letters[1:6])

  • And if there’s still not enough room for side-by-side, the each
    element is given its own line:

    1. options(width = 10)
    2. compare(letters[1:5], letters[1:6])

When comparing more complex objects, waldo creates an executable code
path telling you where the differences lie:

  • Unnamed lists are compared by position:

    1. compare(list(factor("x")), list(1L))

  • Named lists, including data frames, are compared by name. For example,
    note that the following comparison reports a difference in the class
    and names, but not the values of the columns.

    1. df1 <- data.frame(x = 1:3, y = 3:1)
    2. df2 <- tibble::tibble(rev(df1))
    3. compare(df1, df2)

  • Recursion can be arbitrarily deep:

    1. x <- list(a = list(b = list(c = list(structure(1, e = 1)))))
    2. y <- list(a = list(b = list(c = list(structure(1, e = "a")))))
    3. compare(x, y)