The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
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:
You can install the released version of waldo from CRAN with:
install.packages("waldo")
library(waldo)
When comparing atomic vectors, compare()
produces diffs
(thanks to diffobj)
that highlight additions, deletions, and changes, along with a little
context:
Deletion
compare(c("a", "b", "c"), c("a", "b"))
Addition
compare(c("a", "b"), c("a", "b", "c"))
Change
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.
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:
compare(letters[1:5], letters[1:6])
If there’s not enough room for that, the two vectors are shown side-by-side:
options(width = 20)
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:
options(width = 10)
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:
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.
<- data.frame(x = 1:3, y = 3:1)
df1 <- tibble::tibble(rev(df1))
df2 compare(df1, df2)
Recursion can be arbitrarily deep:
<- list(a = list(b = list(c = list(structure(1, e = 1)))))
x <- list(a = list(b = list(c = list(structure(1, e = "a")))))
y compare(x, y)
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.