{"ecosystem":"cran","package":"vctrs","from_version":null,"to_version":null,"changes":[{"from_version":"v0.6.5","to_version":"v0.7.0","change_type":"breaking","description":"R >=4.0.0 is now required. This is still more permissive than the general tidyverse policy of supporting the [5 most recent versions of R](https://tidyverse.org/blog/2019/04/r-version-support/).","migration_hint":null},{"from_version":"v0.6.5","to_version":"v0.7.0","change_type":"breaking","description":"`obj_is_list()` now returns `FALSE` for list arrays. Functions such as `list_drop_empty()` and `list_combine()` validate their input using `obj_is_list()`, but aren't well defined on list arrays.","migration_hint":null},{"from_version":"v0.6.5","to_version":"v0.7.0","change_type":"breaking","description":"Assigning `NULL` into a `<list_of>` via `x[[i]] <- NULL` now shortens the list to better align with base R and the existing `$<-` and `[<-` methods (#2112).","migration_hint":null},{"from_version":"v0.6.5","to_version":"v0.7.0","change_type":"breaking","description":"`as_list_of()` on an existing `<list_of>` no longer has a `.ptype` argument for changing the type on the fly, as this feels incompatible with the new system that allows restricting both the type and size. If you really need this, coerce to a bare list with `as.list()` first, then coerce back to a `<list_of>` using the `<list>` method of `as_list_of()`.","migration_hint":null},{"from_version":"v0.6.5","to_version":"v0.7.0","change_type":"breaking","description":"Experimental \"partial\" type support has been removed. This idea never panned out and was not widely used. The following functions have been removed (#2101):","migration_hint":null},{"from_version":"v0.2.4","to_version":"v0.3.0","change_type":"breaking","description":"Double-dispatch methods for `vec_ptype2()` and `vec_cast()` are no longer inherited (#710). Class implementers must implement one set of methods for each compatible class. For example, a tibble subclass no longer inherits from the `vec_ptype2()` methods between `tbl_df` and `data.frame`. This means that you explicitly need to implement `vec_ptype2()` methods with `tbl_df` and `data.frame`. This change requires a bit more work from class maintainers but is safer because the coercion hierarchies a","migration_hint":null},{"from_version":"v0.2.4","to_version":"v0.3.0","change_type":"breaking","description":"`vec_cast()` is now restricted to the same conversions as `vec_ptype2()` methods (#606, #741). This change is motivated by safety and performance:","migration_hint":null},{"from_version":"v0.2.4","to_version":"v0.3.0","change_type":"breaking","description":"It is generally sloppy to generically convert arbitrary inputs to one type. Restricted coercions are more predictable and allow your code to fail earlier when there is a type issue.","migration_hint":null},{"from_version":"v0.2.4","to_version":"v0.3.0","change_type":"breaking","description":"When unrestricted conversions are useful, this is generally towards a known type. For example, `glue::glue()` needs to convert arbitrary inputs to the known character type. In this case, using double dispatch instead of a single dispatch generic like `as.character()` is wasteful.","migration_hint":null},{"from_version":"v0.2.4","to_version":"v0.3.0","change_type":"breaking","description":"To implement the useful semantics of coercible casts (already used in `vec_assign()`), two double dispatch were needed. Now it can be done with one double dispatch by calling `vec_cast()` directly.","migration_hint":null},{"from_version":"v0.2.3","to_version":"v0.2.4","change_type":"breaking","description":"`numeric_version` and `package_version` lists are now treated as vectors (#723).","migration_hint":null},{"from_version":"v0.2.3","to_version":"v0.2.4","change_type":"breaking","description":"`vec_slice()` now properly handles symbols and S3 subscripts.","migration_hint":null},{"from_version":"v0.2.3","to_version":"v0.2.4","change_type":"breaking","description":"`vec_as_location()` and `vec_as_subscript()` are now fully implemented in C for efficiency.","migration_hint":null},{"from_version":"v0.2.3","to_version":"v0.2.4","change_type":"breaking","description":"`num_as_location()` gains a new argument, `zero`, for controlling whether to `\"remove\"`, `\"ignore\"`, or `\"error\"` on zero values (#852).","migration_hint":null},{"from_version":"unknown","to_version":"v0.2.0","change_type":"breaking","description":"Lossy casts now throw errors of type `vctrs_error_cast_lossy`. Previously these were warnings. You can suppress these errors selectively with `allow_lossy_cast()` to get the partial cast results. To implement your own lossy cast operation, call the new exported function `maybe_lossy_cast()`.","migration_hint":null},{"from_version":"unknown","to_version":"v0.2.0","change_type":"breaking","description":"`vec_c()` now fails when an input is supplied with a name but has internal names or is length > 1: ``` vec_c(foo = c(a = 1)) #> Error: Can't merge the outer name `foo` with a named vector. #> Please supply a `.name_spec` specification. vec_c(foo = 1:3) #> Error: Can't merge the outer name `foo` with a vector of length > 1. #> Please supply a `.name_spec` specification. ``` You can supply a name specification that describes how to combine the external name of the input with its internal names or ","migration_hint":null},{"from_version":"unknown","to_version":"v0.2.0","change_type":"breaking","description":"`vec_empty()` has been renamed to `vec_is_empty()`.","migration_hint":null},{"from_version":"unknown","to_version":"v0.2.0","change_type":"breaking","description":"`vec_dim()` and `vec_dims()` are no longer exported.","migration_hint":null},{"from_version":"unknown","to_version":"v0.2.0","change_type":"breaking","description":"`vec_na()` has been renamed to `vec_init()`, as the primary use case is to initialize an output container.","migration_hint":null}],"total":19,"note":"Curated major-version breaking changes. Always verify against the package's official changelog before migrating.","_cache":"hit"}