- Avoid failure in fledge workflow if no changes (#1618).
- Fetch tags for fledge workflow to avoid unnecessary NEWS entries (#1617).
- Use larger retry count for lock-threads workflow (#1616).
- Ignore errors when removing pkg-config on macOS (#1615).
- Explicit permissions (#1614).
- Use styler from main branch (#1613).
-
Need to install R on Ubuntu 24.04 (#1612).
-
Use Ubuntu 24.04 and styler PR (#1610).
- Correctly detect branch protection (#1608).
- Use stable pak (#1607).
-
Trigger run (#1606).
-
ci: Trigger run
-
ci: Latest changes
-
-
Use pkgdown branch (#1604).
-
ci: Use pkgdown branch
-
ci: Updates from duckdb
-
ci: Trigger run
-
- Rework
view()
to better work with RStudio and Positron (@DavisVaughan, #1551, #1603).
-
Install via R CMD INSTALL ., not pak (#1601).
-
ci: Install via R CMD INSTALL ., not pak
-
ci: Bump version of upload-artifact action
-
-
Install local package for pkgdown builds.
-
Improve support for protected branches with fledge.
-
Improve support for protected branches, without fledge.
-
Auto-update from GitHub Actions.
Run: https://github.com/tidyverse/tibble/actions/runs/10425484383
- Sync with latest developments.
- Use v2 instead of master.
- Inline action.
-
Auto-update from GitHub Actions.
Run: https://github.com/tidyverse/tibble/actions/runs/10224243858
- Use dev roxygen2 and decor.
- Request to not edit
NEWS.md
.
-
Auto-update from GitHub Actions.
Run: https://github.com/tidyverse/tibble/actions/runs/9884064046
-
Auto-update from GitHub Actions.
Run: https://github.com/tidyverse/tibble/actions/runs/9871752503
- Use roxygen2 PR to fix documentation.
- Snapshot updates for rcc-smoke (null) (#1597).
- Drop fansi and import cli (@olivroy, #1589).
- Fix on Windows, tweak lock workflow.
-
Auto-update from GitHub Actions.
Run: https://github.com/tidyverse/tibble/actions/runs/9728440241
-
Avoid checking bashisms on Windows.
-
Better commit message.
-
Bump versions, better default, consume custom matrix.
-
Upkeep drop crayon + mockr (@olivroy, #1587).
-
Auto-update from GitHub Actions.
Run: https://github.com/tidyverse/tibble/actions/runs/9687521438
-
Replace non-API
SET_S4_OBJECT()
withRf_asS4()
(@olivroy, #1588).
-
Fix.
-
Remove dead workflow.
-
Recent updates.
- Snapshot updates (#1580).
new_tibble()
andas_tibble()
support attributes named"n"
and"x"
(#1573, #1574).
- Internal changes only.
-
Revert "Fix as_tibble() usage".
This reverts commit 49d0b63504c4e3f77beaf2889ace12cad7d3f293.
- Internal changes only.
as_tibble()
callsas.data.frame()
for objects that are not subclasses of"tbl_df"
(@TimTaylor, #1556, #1557).
- Check fast path first.
- Skip tests if packages are missing.
- Skip tests if packages are missing.
- Merge pull request #1565 from tidyverse/snapshot-main-rcc-smoke-null.
-
Merge pull request #1562 from tidyverse/snapshot-main-rcc-smoke-null.
-
Merge pull request #1561 from tidyverse/snapshot-main-rcc-full-config-os-macos-latest-r-release.
- Merge pull request #1560 from tidyverse/snapshot-main-R-CMD-check-base-null.
- Fix rendering if suggested packages are missing.
- Override :: to avoid failures in tests without suggested packages.
- Merge branch 'docs'.
- Snapshot updates for rcc-smoke (null) (#1548).
- Alt text (@maelle, #1528, #1539).
- Merged cran-3.2.1 into main.
- Internal changes only.
- Merge pull request #1527 from tidyverse/snapshot-main-rcc-smoke-null.
- Internal changes only.
- Use symbol instead of string in
.Call()
.
-
Accurate location of the source of an error in error messages (#1379, #1065, #1508).
-
as_data_frame()
now also refers toas.data.frame()
in its deprecation message (#1149, #1506).
-
Deprecated functions and arguments where we could not detect usage by other CRAN packages (#1515):
-
data_frame_()
,lst_()
,frame_data()
-
as_tibble(validate = )
,as_tibble(NULL)
,new_tibble(subclass = )
-
add_row()
andadd_column()
for non-data-frame input -
add_column()
for input with non-unique names -
corner cases for
tbl[[x]]
-
-
Breaking change: Remove
knit_print.trunc_mat()
method (#1516). -
Forward
trunc_mat()
to new-style pillar methods (#1517).
- Allow
glue()
and other classed characters for subassignment (#1150, #1503).
- Reduce overhead of single-column subset assignment (#1363).
-
New
vignette("extending")
(#275, #1512). -
Minor updates (#1151, #1070, #1512, #1485).
-
Update example for
nrow
argument tonew_tibble()
(@heavywatal, #1394). -
Fix display of mermaid diagrams in
vignette("formats")
(@maelle, #1497, #1498). -
Remove ANSI escapes from invariants article on pkgdown (#1374).
-
Require vctrs >= 0.4.1 and pillar >= 1.8.1
-
Use cli for formatting conditions (#1387).
-
Use
vec_as_location(missing = "error")
for better error messages (#741, #1511). -
Remove compatibility code for RSDA package which is broken anyway due to other changes (#923, #1509).
-
Skip tests if suggested packages not available (#1246, @MichaelChirico).
-
Remove obsolete tests (#1513).
-
Better reporting for error calls from
vec_as_location()
(#1237). -
Mention
median()
in Recovery section ofvignette("numbers")
(#1197).
trunc_mat()
now returns a value with a different structure. This is considered an implementation detail that can change in the future, do not rely on it. The only guarantee is that callingprint()
will display the input like a tibble (#1059).
- Avoid listing
dim_desc()
in reexports. - Add more examples for data frame and matrix columns (#978, #1012).
- Require rlang 1.0.1 and pillar 1.7.0 (#1063).
- Prefer
class
over.subclass
inrlang::error_cnd()
(#1015, #1060).
set_num_opts()
andset_char_opts()
are reexported from pillar (#959).view()
usesrlang::expr_deparse(width = Inf)
to avoid errors with long|>
pipes (#957).new_tibble()
checks that thenrow
argument is nonnegative and less than 2^31 (#916).tbl_sum.tbl_df()
has an ellipsis in its formals for extensibility.
- Avoid necessity to set
"tibble.view_max"
option for lazy tables (#954). - Avoid blanket import for lifecycle package for compatibility with upcoming rlang (#955, @romainfrancois).
as.data.frame.tbl_df()
strips inner column names (#837).new_tibble()
allows omitting thenrow
argument again (#781).
- Move
vignette("digits")
,vignette("numbers")
,?num
and?char
from the pillar package here (#913). - Replace
iris
bytrees
(#943). - Various documentation improvements.
- New
?tibble_options
help page (#912).
x[i, j] <- one_row_value
avoids explicit recycling of the right-hand side, the recycling happens implicitly invctrs::vec_assign()
for performance (#922).
- Vignettes are now tested with a snapshot test (#919).
new_tibble()
usesvctrs::new_data_frame()
internally (#726, @DavisVaughan).- Adapt to pillar 1.6.2.
- Fix tests for compatibility with pillar 1.6.2.
tbl[row, col] <- rhs
treats an all-NA
logical vector as a missing value both for existing data (#773) and for the right-hand side value (#868). This means that a column initialized withNA
(of typelogical
) will change its type when a row is updated to a value of a different type.[[<-()
supports symbols (#893).
as_tibble_row()
supports arbitrary vectors (#797).enframe()
anddeframe()
support arbitrary vectors (#730).tibble()
andtibble_row()
ignore all columns that evaluate toNULL
, not only those where a verbatimNULL
is passed (#895, #900).new_tibble()
is now faster (#901, @mgirlich).
- Establish compatibility with rlang > 0.4.11 (#908).
- Use
pillar::dim_desc()
(#859). - Establish compatibility with testthat > 3.0.3 (#896, @lionel-).
- Bump required versions of ellipsis and vctrs to avoid warning during package load.
- Bump required versions of ellipsis and vctrs to avoid warning during package load.
num()
andchar()
are reexported from pillar (#880).tribble()
andframe_matrix()
give an error if values are named (#871, @lorenzwalthert).- Document
cli.num_colors
option (#410). - Fix
new_tibble()
examples for compatibility with pillar 1.6.0.
-
has_rownames()
now works correctly for data frames with a"row.names"
attribute malformed due to a problem instructure()
(#852). -
tbl[FALSE, "column"] <- x
adds new column again (#846).
-
Importing pillar 1.5.0, cli and crayon are now suggested packages (#475).
-
size_sum()
is now reexported from pillar (#850, @topepo). -
as_tibble()
hints more often to use the.name_repair
argument if column names are invalid (#855). -
as_tibble.table()
mentions.name_repair
argument in the error message (#839).
-
Remove compatibility code for pillar < 1.5.0 (#861).
-
Moved most functions to the "stable" lifecycle (#860).
vec_ptype_abbr.tbl_df()
andtype_sum.tbl_df()
now uses the name of the topmost class for subclasses of"tbl_df"
(#843).- Ignore errors in
formats.Rmd
vignette. - Avoid tidy evaluation in pillar compatibility code.
- Use testthat edition 3, compatible with testthat 3.0.1 (#827, #832).
-
Establish compatibility with upcoming pillar 1.5.0 (#818).
-
tbl_sum()
shows "data frame" instead of "tibble" for objects inheriting from"tbl"
but not"tbl_df"
(#818). -
Register
format.tbl()
andprint.tbl()
methods only if pillar doesn't (#816). -
Use
vctrs::num_as_location()
internally for subset assignment of rows and columns for better error messages (#746). -
Adapt tests to the development version of testthat.
-
Fix documentation link to
base::Extract
. -
add_row(df)
adds an empty row again (#809, @DavisVaughan).
-
Fix test compatibility with rlang 0.4.7.
-
Fix warning about
needs_dots
arguments with pillar >= 1.4.5 (#798).
-
[[
works with classed indexes again, e.g. created withglue::glue()
(#778). -
add_column()
works without warning for 0-column data frames (#786). -
tribble()
now better handles named inputs (#775) and objects of non-vtrs classes likelubridate::Period
(#784) andformattable::formattable
(#785).
-
Subsetting and subassignment are faster (#780, #790, #794).
-
is.null()
is preferred overis_null()
for speed. -
Implement continuous benchmarking (#793).
is_vector_s3()
is no longer reexported from pillar (#789).
-
[<-.tbl_df()
coerces matrices to data frames (#762). -
Use delayed import for cli to work around unload problems in downstream packages (#754).
-
More soft-deprecation warnings are actually visible.
-
If
.name_repair
is a function, no repair messages are shown (#763). -
Remove superseded signal for
as_tibble.list()
, becauseas_tibble_row()
only works for size 1.
-
as_tibble(validate = )
now always triggers a deprecation warning. -
Subsetting and subassignment of rows with one-column matrices work again, with a deprecation warning (#760).
-
Attempts to update a tibble row with an atomic vector give a clearer error message. Recycling message for subassignment appears only if target size is != 1.
-
Tweak title of "Invariants" vignette.
-
Subset assignment ("subassignment") and also subsetting has become stricter. Symptoms:
-
Error: No common type for ...
-
Error: Assigned data
...
must be compatible with ... -
i
must have one dimension, not 2 -
Error: Lossy cast from ... to ...
The "invariants" article at https://tibble.tidyverse.org/dev/articles/invariants.html describes the invariants that the operations follow in tibble, and the most important differences to data frames. We tried to make subsetting and subassignment as safe as possible, so that errors are caught early on, while introducing as little friction as possible.
-
-
List classes are no longer automatically treated as vectors. Symptoms:
-
Error: All columns in a tibble must be vectors
-
Error: Expected a vector, not a
...
object
If you implement a class that wraps a list as S3 vector, you need to include
"list"
in the class:structure(x, class = c("your_s3_class", "list"))
Alternatively, implement a
vec_proxy()
method as described in https://vctrs.r-lib.org/reference/vec_data.html, or construct your class withlist_of()
. -
-
Added experimental support for inner names for all columns, of the form
tibble(a = c(b = 1))
. Inner names are no longer stripped when creating a tibble. They are maintained for slicing operations but not yet updated when assigning with a row subscript. This is a change that may break existing comparison tests that don't expect names in columns (#630). Symptoms:- "names for target but not for current" when comparing
-
tibble()
now splices anonymous data frames,tibble(tibble(a = 1), b = a)
is equivalent totibble(a = 1, b = a)
. This means thattibble(trees)
now has three columns, usetibble(trees = trees)
if the intention is to create a packed data frame (#581). -
The
name-repair
help topic is gone, refer to?vctrs::vec_as_names
instead. -
expression()
columns are converted to lists as a workaround for lacking support in vctrs (#657). -
tribble()
is now stricter when combining values. All values in a column must be compatible, otherwise an error occurs (#204). The criteria for wrapping in a list column are now based on vctrs principles: non-vectors or vectors withvctrs::vec_size()
unequal 1 are wrapped in lists. -
$
warns unconditionally if column not found,[[
doesn't warn. -
add_row()
now usesvctrs::vec_rbind()
under the hood, this means that all columns are combined withvctrs::vec_c()
. In particular, factor columns will be converted to character if one of the columns is a character column.
-
Soft-deprecate
subclass
argument tonew_tibble()
. -
Soft-deprecate
as_tibble()
without arguments (#683). -
Preparing to move
glimpse()
andtbl_sum()
to the pillar package. If your package implements these methods, please import the generics from pillar as soon as they become available there.
-
Internals now make heavy use of the vctrs package, following most of the invariants defined there. Name repair is the responsibility of vctrs now (#464).
-
All errors emitted directly by the package inherit from the
"tibble_error"
and"rlang_error"
classes. In some cases,"vctrs_error"
errors may be passed through. The exact subclass is subject to change.Example:
tibble(a = quote(b))
raises an error that inherits from"tibble_error_column_must_be_vector"
,"tibble_error"
and"rlang_error"
, and from"error"
and"condition"
like all errors. Do not rely on the wording of"tibble_error_column_must_be_vector"
, this is likely to change.Use the following pattern to catch errors emitted by tibble:
tryCatch( your_code(), tibble_error = function(cnd) { } )
-
New
tibble_row()
constructs tibbles that have exactly one row, or fails. Non-vector objects are automatically wrapped in a list, vectors (including lists) must have length one (#205). -
New
as_tibble_row()
andas_tibble_col()
convert a bare vector to a one-row or one-column tibble, respectively.as_tibble_col()
also works for non-bare vectors. Usingas_tibble()
for bare vectors is superseded (#447). -
as_tibble.data.frame()
uses implicit row names if asked to create a column from row names. This allows lossless direct conversion of matrices with row names to tibbles (#567, @stufield). -
Implement
str.tbl_df()
(#480). -
tribble()
now returns columns with"unspecified"
type for 0-row tibbles. -
add_row()
andadd_column()
now restore attributes to avoid errors when appending to sf objects or other tibble subclasses (#662). -
add_column()
gains.name_repair
argument. If not given,.data
must have unique columns, with a deprecation message. -
Allow
POSIXlt
columns, they are now better supported by dplyr and other tools thanks to vctrs (#626). -
tibble()
ignores NULL arguments, named or unnamed (#580). -
view()
works for remote data sources by applying the same strategy asprint()
andglimpse()
. The maximum number of rows in this case can be specified using the newn
argument, by default it is taken from the new"tibble.view_max"
option (#695).
-
Formatting dimensions never uses scientific notation.
-
glimpse()
uses "Rows" and "Columns" instead of "Variables" and "Observations", because we're not sure if the data is tidy here (#614). -
view()
now uses the created (or passed) title argument (#610, @xvrdm).
- Construction and subsetting of large data frames is faster now (#717, @romainfrancois).
-
Import lifecycle package (#669).
-
new_tibble()
removes redundant subclasses from the"class"
attribute. -
Using classed conditions. All classes start with
"tibble_error_"
and also contain"tibble_error"
(#659). -
The magrittr pipe
%>%
is reexported.
- Fix compatibility with R 3.5 and earlier, regression introduced in tibble 2.1.2.
-
Relax version requirements.
-
Fix test failing after pillar upgrade.
-
Three dots are used even for
"unique"
name repair (#566). -
add_row()
,add_case()
andadd_column()
now signal a warning once per session if the input is not a data frame (#575). -
Fix
view()
for the case when an object namedx
exists in the global environment (#579).
-
tibble names can again be set to
NULL
within RStudio, as some R routines within RStudio relied on this behaviour (#563, @kevinushey). -
as_tibble.matrix(validate = TRUE)
works again, with a lifecycle warning (#558). -
Replace
new_list_along()
byrep_along()
to support rlang 0.3.1 (#557, @lionel-).
The tibble()
and as_tibble()
functions, and the low-level new_tibble()
constructor, have undergone a major overhaul to improve consistency. We suspect that package code will be affected more than analysis code.
To improve compatibility with existing code, breaking changes were reduced to a minimum and in some cases replaced with a warning that appears once per session. Call tibble:::scoped_lifecycle_errors()
when updating your packages or scripts to the new semantics API to turn these warnings into errors. The compatibility code will be removed in tibble 3.0.0.
-
All optional arguments have moved past the ellipsis, and must be specified as named arguments. This affects mostly the
n
argument toas_tibble.table()
, passingn
unnamed still works (with a warning). -
new_tibble()
has been optimized for performance, the function no longer strips dimensions from 1d arrays and no longer checks correctness of names or column lengths. (It still checks if the object is named, except for zero-length input.) Use the newvalidate_tibble()
if you need these checks (#471). -
The
nrow
argument tonew_tibble()
is now mandatory. Theclass
argument replaces the now deprecatedsubclass
argument, the latter will be supported quietly for some time (#518). -
Setting names on a tibble via
names(df) <- ...
now also requires minimal names, otherwise a warning is issued once per session (#466). -
In
as_tibble()
, checking names is also enabled by default, even for tibbles, matrices and other matrix-like objects: names must exist,NA
names are not allowed. Coercing a matrix without column names will trigger a warning once per session. (This corresponds to the"minimal"
checks described below.). -
The
validate
argument toas_tibble()
has been deprecated, see below for alternatives. (Theas_tibble.tbl_df()
method has been removed, theas_tibble.data.frame()
method will be used for tibbles.) -
as_tibble()
always checks that all columns are 1D or 2D vectors and not of typePOSIXlt
, even withvalidate = FALSE
(which is now deprecated). -
Calling
as_tibble()
on a vector now warns once per session. Useenframe(name = NULL)
for converting a vector to a one-column tibble, orenframe()
for converting a named vector to a two-column tibble. -
data_frame()
andframe_data()
are soft-deprecated, please usetibble()
ortribble()
(#111). -
tibble_()
,data_frame_()
, andlst_()
are soft-deprecated. Please usetibble()
orlst()
(#111, #509). -
as.tibble()
andas_data_frame()
are officially deprecated and not generic anymore, please use/implementas_tibble()
(#111). -
as_tibble.data.frame()
(and alsoas_tibble.matrix()
) strip row names by default. Code that relies on tibbles keeping row names now will see:- a different result when calling
rownames()
orrow.names()
, - rows full of
NA
values when subsetting rows with with a character vector, e.g.as_tibble(mtcars)["Mazda RX4", ]
.
Call
pkgconfig::set_config("tibble::rownames", NA)
to revert to the old behavior of keeping row names. Packages that import tibble can callset_config()
in their.onLoad()
function (#114). - a different result when calling
-
as_tibble()
drops extra classes, in particularas_tibble.grouped_df()
now removes grouping (#535). -
column_to_rownames()
now always coerces to a data frame, because row names are no longer supported in tibbles (#114). -
In all
*_rownames()
functions, the first argument has been renamed to.data
for consistency (#412). -
Subsetting one row with
[..., , drop = TRUE]
returns a tibble (#442). -
The
print.tbl_df()
method has been removed, theprint.tbl()
method handles printing (#519).
-
tibble()
supports columns that are matrices or data frames (#416). -
The new
.rows
argument totibble()
andas_tibble()
allows specifying the expected number of rows explicitly, even if it's evident from the data. This allows writing more defensive code. -
Column name repair has more direct support, via the new
.name_repair
argument totibble()
andas_tibble()
. It takes the following values:"minimal"
: No name repair or checks, beyond basic existence."unique"
: Make sure names are unique and not empty."check_unique"
: (default value), no name repair, but check they areunique
."universal"
: Make the namesunique
and syntactic.- a function: apply custom name repair (e.g.,
.name_repair = make.names
or.name_repair = ~make.names(., unique = TRUE)
for names in the style of base R).
The
validate
argument ofas_tibble()
is deprecated but supported (emits a message once per session). Use.name_repair = "minimal"
instead ofvalidate = FALSE
, and.name_repair = "check_unique"
instead ofvalidate = TRUE
. If you need to support older versions of tibble, pass both.name_repair
andvalidate
arguments in a consistent way, no message will be emitted in this case (#469, @jennybc). -
Row name handling is stricter. Row names are never (and never were) supported in
tibble()
andnew_tibble()
, and are now stripped by default inas_tibble()
. Therownames
argument toas_tibble()
supports:NULL
: remove row names (default),NA
: keep row names,- A string: the name of the new column that will contain the existing row names, which are no longer present in the result.
The old default can be restored by calling
pkgconfig::set_config("tibble::rownames", NA)
, this also works for packages that import tibble. -
new_tibble()
andas_tibble()
now also strip the"dim"
attribute from columns that are one-dimensional arrays. (tibble()
already did this before.) -
Internally, all
as_tibble()
implementation forward all extra arguments and...
toas_tibble.list()
where they are handled. This means that the common.rows
and.name_repair
can be used for all inputs. We suggest that your implementations of this method do the same. -
enframe()
(withname = NULL
) anddeframe()
now support one-column tibbles (#449). -
Improved S4 support by adding
exportClass(tbl_df)
toNAMESPACE
(#436, @jeffreyhanson and @javierfajnolla). -
New
validate_tibble()
checks a tibble for internal consistency (#471). -
Bring error message for invalid column type in line with allowed matrix/df cols (#465, @maxheld83).
- Added experimental
view()
function that always returns its input invisibly and callsutils::View()
only in interactive mode (#373).
-
The
set_tidy_names()
andtidy_names()
helpers the list of new names using a bullet list with at most six items (#406). -
A one-character ellipse (
cli::symbol$ellipsis
) is printed instead of"..."
where available, this affectsglimpse()
output and truncated lists (#403). -
Column names and types are now formatted identically with
glimpse()
andprint.tbl_df()
. -
tidy_names()
quotes variable names when reporting on repair (#407). -
All error messages now follow the tidyverse style guide (#223).
-
as_tibble()
prints an informative error message when using therownames
argument and the input data frame or matrix does not have row names (#388, @anhqle). -
column_to_rownames()
uses the real variable name in its error message (#399, @alexwhan). -
Lazy tibbles with exactly 10 rows no longer show "...with more rows" (#371).
-
glimpse()
shows information obtained fromtbl_sum()
, e.g. grouping information forgrouped_df
from dplyr (#550).
-
glimpse()
takes coloring into account when computing column width, the output is no longer truncated prematurely when coloring is enabled. -
glimpse()
disambiguates outputs for factors if the levels contain commas (#384, @anhqle). -
print.tbl_df()
with a negative value forn
behaves as ifn
was omitted (#371). -
Fixed output for extra column names that contain spaces.
-
Skip dplyr in tests if unavailable (#420, @QuLogic).
-
Skip mockr in tests if unavailable (#454, @Enchufa2).
-
Use
fansi::strwrap_ctl()
instead of own string wrapping routine. -
tibble()
uses recycled values during construction but unrecycled values for validation. -
tibble()
is now faster for very wide tibbles. -
Subsetting with the
[
operator is faster (#544). -
Avoid use of
stop()
in examples if packages are not installed (#453, @Enchufa2). -
Fix
as_tibble()
examples by using correct argument names inrequireNamespace()
call (#424, @michaelweylandt). -
as_tibble()
checks column length only once (#365, @anhqle). -
Using
rlang::list2()
(#391, @lionel-).
- Fix OS X builds.
- The
tibble.width
option is honored again (#369). tbl[1, , drop = TRUE]
now behaves identically to data frames (#367).- Fix error message when accessing columns using a logical index vector (#337, @mundl).
glimpse()
returns its input for zero-column data frames.
enframe(NULL)
now returns the same asenframe(logical())
(#352).tribble()
now ignores trailing commas (#342, @anhqle).- Updated vignettes and website documentation.
- Faster printing of very wide tibbles (#360).
- Faster construction and subsetting for tibbles (#353).
- Only call
nrow()
andhead()
inglimpse()
, notncol()
.
The new pillar package is now responsible for formatting tibbles. Pillar will try to display as many columns as possible, if necessary truncating or shortening the output. Colored output highlights important information and guides the eye. The vignette in the tibble package describes how to adapt custom data types for optimal display in a tibble.
- Make
add_case()
an alias foradd_row()
(#324, @LaDilettante). as_tibble()
gainsrownames
argument (#288, #289).as_tibble.matrix()
repairs column names.- Tibbles now support character subsetting (#312).
`[.tbl_df`()
supportsdrop = TRUE
and omits the warning ifj
is passed. The callsdf[i, j, drop = TRUE]
anddf[j, drop = TRUE]
are now compatible with data frames again (#307, #311).
- Improved compatibility with remote data sources for
glimpse()
(#328). - Logical indexes are supported, a warning is raised if the length does not match the number of rows or 1 (#318).
- Fixed width for word wrapping of the extra information (#301).
- Prevent
add_column()
from dropping classes and attributes by removing the use ofcbind()
. Additionally this ensures thatadd_column()
can be used with grouped data frames (#303, @DavisVaughan). add_column()
to an empty zero-row tibble with a variable of nonzero length now produces a correct error message (#319).
- Reexporting
has_name()
from rlang, instead of forwarding, to avoid warning when importing both rlang and tibble. - Compatible with R 3.1 (#323).
- Remove Rcpp dependency (#313, @patperry).
- Values of length 1 in a
tibble()
call are recycled prior to evaluating subsequent arguments, improving consistency withmutate()
(#213). - Recycling of values of length 1 in a
tibble()
call maintains their class (#284). add_row()
now always preserves the column data types of the input data frame the same way asrbind()
does (#296).lst()
now again handles duplicate names, the value defined last is used in case of a clash.- Adding columns to zero-row data frames now also works when mixing lengths 1 and 0 in the new columns (#167).
- The
validate
argument is now also supported inas_tibble.tbl_df()
, with default toFALSE
(#278). It must be passed as named argument, as inas_tibble(validate = TRUE)
.
format_v()
now always surrounds lists with[]
brackets, even if their length is one. This affectsglimpse()
output for list columns (#106).- Factor levels are escaped when printing (#277).
- Non-syntactic names are now also escaped in
glimpse()
(#280). tibble()
gives a consistent error message in the case of duplicate column names (#291).
- Added
format()
andprint()
methods for bothtbl
andtbl_df
classes, to protect against malformed tibbles that inherit from"tbl_df"
but not"tbl"
, as created e.g. byungroup()
in dplyr 0.5.0 and earlier (#256, #263). - The column width for non-syntactic columns is computed correctly again (#258).
- Printing a tibble doesn't apply quote escaping to list columns.
- Fix error in
tidy_names(syntactic = TRUE, quiet = FALSE)
if not all names are fixed (#260, @imanuelcostigan). - Remove unused import declaration for assertthat.
- Subsetting zero columns no longer returns wrong number of rows (#241, @echasnovski).
- New
set_tidy_names()
andtidy_names()
, a simpler version ofrepair_names()
which works unchanged for now (#217). - New
rowid_to_column()
that adds arowid
column as first column and removes row names (#243, @barnettjacob). - The
all.equal.tbl_df()
method has been removed, callingall.equal()
now forwards tobase::all.equal.data.frame()
. To compare tibbles ignoring row and column order, please usedplyr::all_equal()
(#247).
- Printing now uses
x
again instead of the Unicode multiplication sign, to avoid encoding issues (#216). - String values are now quoted when printing if they contain non-printable characters or quotes (#253).
- The
print()
,format()
, andtbl_sum()
methods are now implemented for class"tbl"
and not for"tbl_df"
. This allows subclasses to use tibble's formatting facilities. The formatting of the header can be tweaked by implementingtbl_sum()
for the subclass, which is expected to return a named character vector. Theprint.tbl_df()
method is still implemented for compatibility with downstream packages, but only callsNextMethod()
. - Own printing routine, not relying on
print.data.frame()
anymore. Now providingformat.tbl_df()
and full support for Unicode characters in names and data, also forglimpse()
(#235).
- Improve formatting of error messages (#223).
- Using
rlang
instead oflazyeval
(#225, @lionel-), andrlang
functions (#244). tribble()
now handles values that have a class (#237, @NikNakk).- Minor efficiency gains by replacing
any(is.na())
withanyNA()
(#229, @csgillespie). - The
microbenchmark
package is now used conditionally (#245). pkgdown
website.
- Time series matrices (objects of class
mts
andts
) are now supported inas_tibble()
(#184). - The
all_equal()
function (called byall.equal.tbl_df()
) now forwards todplyr
and fails with a helpful message if not installed. Data frames with list columns cannot be compared anymore, and differences in the declared class (data.frame
vs.tbl_df
) are ignored. Theall.equal.tbl_df()
method gives a warning and forwards toNextMethod()
ifdplyr
is not installed; callall.equal(as.data.frame(...), ...)
to avoid the warning. This ensures consistent behavior of this function, regardless ifdplyr
is loaded or not (#198).
- Now requiring R 3.1.0 instead of R 3.1.3 (#189).
- Add
as.tibble()
as an alias toas_tibble()
(#160, @LaDilettante). - New
frame_matrix()
, similar toframe_data()
but for matrices (#140, #168, @LaDilettante). - New
deframe()
as reverse operation toenframe()
(#146, #214). - Removed unused dependency on
assertthat
.
- Keep column classes when adding row to empty tibble (#171, #177, @LaDilettante).
- Singular and plural variants for error messages that mention a list of objects (#116, #138, @LaDilettante).
add_column()
can add columns of length 1 (#162, #164, @LaDilettante).
- An attempt to read or update a missing column now throws a clearer warning (#199).
- An attempt to call
add_row()
for a grouped data frame results in a helpful error message (#179).
- Render Unicode multiplication sign as
x
if it cannot be represented in the current locale (#192, @ncarchedi). - Backtick
NA
names in printing (#206, #207, @jennybc). glimpse()
now usestype_sum()
also for S3 objects (#185, #186, @holstius).- The
max.print
option is ignored when printing a tibble (#194, #195, @t-kalinowski).
- Fix typo in
obj_sum
documentation (#193, @etiennebr). - Reword documentation for
tribble()
(#191, @kwstat). - Now explicitly stating minimum Rcpp version 0.12.3.
- Using registration of native routines.
- The
tibble.width
option is used forglimpse()
only if it is finite (#153, @kwstat). - New
as_tibble.poly()
to support conversion of apoly
object to a tibble (#110). add_row()
now correctly handles existing columns of typelist
that are not updated (#148).all.equal()
doesn't throw an error anymore if one of the columns is namedna.last
,decreasing
ormethod
(#107, @BillDunlap).
- New
add_column()
, analogously toadd_row()
(#99). print.tbl_df()
gainsn_extra
method and will have the same interface astrunc_mat()
from now on.add_row()
andadd_column()
gain.before
and.after
arguments which indicate the row (by number) or column (by number or name) before or after which the new data are inserted. Updated or added columns cannot be named.before
or.after
(#99).- Rename
frame_data()
totribble()
, stands for "transposed tibble". The former is still available as alias (#132, #143).
add_row()
now can add multiple rows, with recycling (#142, @jennybc).- Use multiply character
×
instead ofx
when printing dimensions (#126). Output tests had to be disabled for this on Windows. - Back-tick non-semantic column names on output (#131).
- Use
dttm
instead oftime
forPOSIXt
values (#133), which is now used for columns of thedifftime
class. - Better output for 0-row results when total number of rows is unknown (e.g., for SQL data sources).
- New object summary vignette that shows which methods to define for custom vector classes to be used as tibble columns (#151).
- Added more examples for
print.tbl_df()
, now using data fromnycflights13
instead ofLahman
(#121), with guidance to installnycflights13
package if necessary (#152). - Minor changes in vignette (#115, @helix123).
Follow-up release.
tibble()
is no longer an alias forframe_data()
(#82).- Remove
tbl_df()
(#57). $
returnsNULL
if column not found, without partial matching. A warning is given (#109).[[
returnsNULL
if column not found (#109).
- Reworked output: More concise summary (begins with hash
#
and contains more text (#95)), removed empty line, showing number of hidden rows and columns (#51). The trailing metadata also begins with hash#
(#101). Presence of row names is indicated by a star in printed output (#72). - Format
NA
values in character columns as<NA>
, likeprint.data.frame()
does (#69). - The number of printed extra cols is now an option (#68, @lionel-).
- Computation of column width properly handles wide (e.g., Chinese) characters, tests still fail on Windows (#100).
glimpse()
shows nesting structure for lists and uses angle brackets for type (#98).- Tibbles with
POSIXlt
columns can be printed now, the text<POSIXlt>
is shown as placeholder to encourage usage ofPOSIXct
(#86). type_sum()
shows only topmost class for S3 objects.
- Strict checking of integer and logical column indexes. For integers, passing a non-integer index or an out-of-bounds index raises an error. For logicals, only vectors of length 1 or
ncol
are supported. Passing a matrix or an array now raises an error in any case (#83). - Warn if setting non-
NULL
row names (#75). - Consistently surround variable names with single quotes in error messages.
- Use "Unknown column 'x'" as error message if column not found, like base R (#94).
stop()
andwarning()
are now always called withcall. = FALSE
.
- The
.Dim
attribute is silently stripped from columns that are 1d matrices (#84). - Converting a tibble without row names to a regular data frame does not add explicit row names.
as_tibble.data.frame()
preserves attributes, and usesas_tibble.list()
to calling overriden methods which may lead to endless recursion.
- New
has_name()
(#102). - Prefer
tibble()
andas_tibble()
overdata_frame()
andas_data_frame()
in code and documentation (#82). - New
is.tibble()
andis_tibble()
(#79). - New
enframe()
that converts vectors to two-column tibbles (#31, #74). obj_sum()
andtype_sum()
show"tibble"
instead of"tbl_df"
for tibbles (#82).as_tibble.data.frame()
gainsvalidate
argument (as inas_tibble.list()
), ifTRUE
the input is validated.- Implement
as_tibble.default()
(#71, tidyverse/dplyr#1752). has_rownames()
supports arguments that are not data frames.
- Two-dimensional indexing with
[[
works (#58, #63). - Subsetting with empty index (e.g.,
x[]
) also removes row names.
- Document behavior of
as_tibble.tbl_df()
for subclasses (#60). - Document and test that subsetting removes row names.
- Don't rely on
knitr
internals for testing (#78). - Fix compatibility with
knitr
1.13 (#76). - Enhance
knit_print()
tests. - Provide default implementation for
tbl_sum.tbl_sql()
andtbl_sum.tbl_grouped_df()
to allowdplyr
release before atibble
release. - Explicit tests for
format_v()
(#98). - Test output for
NULL
value oftbl_sum()
. - Test subsetting in all variants (#62).
- Add missing test from dplyr.
- Use new
expect_output_file()
fromtestthat
.
-
Initial CRAN release
-
Extracted from
dplyr
0.4.3 -
Exported functions:
tbl_df()
as_data_frame()
data_frame()
,data_frame_()
frame_data()
,tibble()
glimpse()
trunc_mat()
,knit_print.trunc_mat()
type_sum()
- New
lst()
andlst_()
create lists in the same way thatdata_frame()
anddata_frame_()
create data frames (tidyverse/dplyr#1290).lst(NULL)
doesn't raise an error (#17, @jennybc), but always uses deparsed expression as name (even forNULL
). - New
add_row()
makes it easy to add a new row to data frame (tidyverse/dplyr#1021). - New
rownames_to_column()
andcolumn_to_rownames()
(#11, @zhilongjia). - New
has_rownames()
andremove_rownames()
(#44). - New
repair_names()
fixes missing and duplicate names (#10, #15, @r2evans). - New
is_vector_s3()
.
-
Features
- New
as_data_frame.table()
with argumentn
to control name of count column (#22, #23). - Use
tibble
prefix for options (#13, #36). glimpse()
now (invisibly) returns its argument (tidyverse/dplyr#1570). It is now a generic, the default method dispatches tostr()
(tidyverse/dplyr#1325). The default width is obtained from thetibble.width
option (#35, #56).as_data_frame()
is now an S3 generic with methods for lists (the oldas_data_frame()
), data frames (trivial), matrices (with efficient C++ implementation) (tidyverse/dplyr#876), andNULL
(returns a 0-row 0-column data frame) (#17, @jennybc).- Non-scalar input to
frame_data()
andtibble()
(including lists) creates list-valued columns (#7). These functions return 0-row but n-col data frame if no data.
- New
-
Bug fixes
frame_data()
properly constructs rectangular tables (tidyverse/dplyr#1377, @kevinushey).
-
Minor modifications
- Uses
setOldClass(c("tbl_df", "tbl", "data.frame"))
to help with S4 (tidyverse/dplyr#969). tbl_df()
automatically generates column names (tidyverse/dplyr#1606).tbl_df
s gain$
and[[
methods that are ~5x faster than the defaults, never do partial matching (tidyverse/dplyr#1504), and throw an error if the variable does not exist.[[.tbl_df()
falls back to regular subsetting when used with anything other than a single string (#29).base::getElement()
now works with tibbles (#9).all_equal()
allows to compare data frames ignoring row and column order, and optionally ignoring minor differences in type (e.g. int vs. double) (tidyverse/dplyr#821). Used byall.equal()
for tibbles. (This package contains a pure R implementation ofall_equal()
, thedplyr
code has identical behavior but is written in C++ and thus faster.)- The internals of
data_frame()
andas_data_frame()
have been aligned, soas_data_frame()
will now automatically recycle length-1 vectors. Both functions give more informative error messages if you are attempting to create an invalid data frame. You can no longer create a data frame with duplicated names (tidyverse/dplyr#820). Both functions now check that you don't have anyPOSIXlt
columns, and tell you to usePOSIXct
if you do (tidyverse/dplyr#813).data_frame(NULL)
raises error "must be a 1d atomic vector or list". trunc_mat()
andprint.tbl_df()
are considerably faster if you have very wide data frames. They will now also only list the first 100 additional variables not already on screen - control this with the newn_extra
parameter toprint()
(tidyverse/dplyr#1161). The type of list columns is printed correctly (tidyverse/dplyr#1379). Thewidth
argument is used also for 0-row or 0-column data frames (#18).- When used in list-columns, S4 objects only print the class name rather than the full class hierarchy (#33).
- Add test that
[.tbl_df()
does not change class (#41, @jennybc). Improve[.tbl_df()
error message.
- Uses
-
Documentation
- Update README, with edits (#52, @bhive01) and enhancements (#54, @jennybc).
vignette("tibble")
describes the difference between tbl_dfs and regular data frames (tidyverse/dplyr#1468).
-
Code quality
- Test using new-style Travis-CI and AppVeyor. Full test coverage (#24, #53). Regression tests load known output from file (#49).
- Renamed
obj_type()
toobj_sum()
, improvements, better integration withtype_sum()
. - Internal cleanup.