Make obj_is_list() return FALSE for list arrays
#2114
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #2012
Both feisr and merTools break with dev vctrs. They both try to call
list_unchop()with a list array.Internally we assume that if
obj_is_list()istrue, thenr_length(x) == vec_size(x)and are interchangeable. This is what brokelist_unchop()for these two packages. We switched tovec_size()instead ofr_length()in the C code after a call toobj_check_list()vctrs/src/list-combine.c
Lines 291 to 294 in e1c3308
It's not clear what
list_unchop()should even do with a list array. It's also not clear for functions likelist_drop_empty(), where the output is unconditionally an atomic list vector. I'd argue that most vctrslist_*()functions that check their input withobj_is_list()are not prepared for list arrays, soobj_is_list()should simply returnFALSEon them.So the example from #2012 no longer silently succeeds with an incorrect answer, but instead returns a clear failure of: