Skip to content

move from warning to breaking change in melt/dcast #6629

Description

@tdhock

v1.16.0 NEWS says that two new warnings may be changed in a future release into backwards-incompatible changes, for consistency:

  1. ?melt has long documented that the returned variable column should contain integer column indices when measure.vars is a list, but when the list length is 1, variable is actually a character column name, which is inconsistent with the documentation, #5209. To increase consistency in the next release, we plan to change variable to integer, so users who were relying on this behavior should change measure.vars=list("col_name") (variable currently is a column name but will be a column index/integer after this planned change) to measure.vars="col_name" (variable is column name before and after the planned change). For now, relying on this undocumented behavior throws a new warning.

  2. ?dcast has always required fun.aggregate to return a single value, and when fill=NULL, dcast would indeed error if a vector with length!=1 was returned, but an undefined result was silently returned for non-NULL fill. Now dcast() will additionally warn that this is undefined behavior when fill is not NULL, #6032. In particular, this will warn for fun.aggregate=identity, which was observed in several revdeps. We may change this to an error in a future release, so revdeps should fix their code as soon as possible. Thanks to @tdhock for the PR, and @MichaelChirico for analysis of GitHub revdeps.

Activity

  1. added this to the 1.17.0 milestone on Nov 29, 2024
  2. self-assigned this
    on Nov 29, 2024
  3. modified the milestones: 1.17.0, 1.18.0 on Jan 20, 2025
  4. Mukulyadav2004 commented on Aug 17, 2025

    @Mukulyadav2004
    Contributor

    Hi @tdhock
    Is it appropriate to add lock in tests to capture the current warning now/break later behaviour for both the melt() list length 1 case and the dcast() fun.aggregate fill case, so they can be flipped easily in v1.18.0 ?
    I believe this will guard against accidental early flips before the planned change.

    When warning will be moved to breaking change in 1.18.0, then we'll update these to expected error. WDYT?

  5. tdhock commented on Aug 20, 2025

    @tdhock
    MemberAuthor

    I don't understand "lock in tests"
    if you want to please submit a PR which modifies the functionality and test case.

  6. reopened this on Aug 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

breaking-changeissues whose solution would require breaking existing behaviorconsistencyreshapedcast melt

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions