bugfix has_columns()
passing character vector of non-existing columns
#540
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.
I introduced a regression in #539 when I let hard-coded character vectors bypass the tidyselect-based column resolving mechanism (in
resolve_columns()
). This introduced a side-effect inhas_columns()
(which shares the same mechanism), making it pass character vectors through without checking for existence:This happened because a column selecting expression may successfully resolve to a character vector, but the columns in the vector themselves may not exist in the data.
has_columns()
was missing a check for the latter.The PR ensures that
has_columns()
does an additional non-lazy check for existence of the resolved columns from the data - sinceactive = ... has_columns() ...
is called during interrogate, the tbl is resolved to an actual dataframe by then.Now all variants align in producing the expected behavior when checking for a non-existent column:
I've added more unit tests to cover this nuance specific to
has_columns()
(so this shouldn't accidentally regress again!)