Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Use dplyr_reconstruct_dispatch() to avoid issues with R >= 4.3 #52

Merged
merged 6 commits into from
Sep 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion R/arrange.R
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ arrange.duckplyr_df <- function(.data, ..., .by_group = FALSE, .locale = NULL) {
exprs <- rel_translate_dots(dots, .data)
out_rel <- rel_order(rel, exprs)
out <- rel_to_df(out_rel)
out <- dplyr_reconstruct(out, .data)
out <- dplyr_reconstruct_dispatch(out, .data)
return(out)
}
)
Expand Down
4 changes: 2 additions & 2 deletions R/count.R
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ count.duckplyr_df <- function(x, ..., wt = NULL, sort = FALSE, name = NULL, .dro
}

out <- rel_to_df(out_rel)
out <- dplyr_reconstruct(out, x)
out <- dplyr_reconstruct_dispatch(out, x)

return(out)
}
Expand All @@ -63,7 +63,7 @@ count.duckplyr_df <- function(x, ..., wt = NULL, sort = FALSE, name = NULL, .dro
out <- tally(out, wt = !!enquo(wt), sort = sort, name = name)

# Ensure grouping is transient
out <- dplyr_reconstruct(out, x)
out <- dplyr_reconstruct_dispatch(out, x)

out
}
Expand Down
2 changes: 1 addition & 1 deletion R/distinct.R
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ distinct.duckplyr_df <- function(.data, ..., .keep_all = FALSE) {
}

out <- rel_to_df(out_rel)
out <- dplyr_reconstruct(out, .data)
out <- dplyr_reconstruct_dispatch(out, .data)
return(out)
}
)
Expand Down
2 changes: 2 additions & 0 deletions R/dplyr.R
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ DataMask <- dplyr$DataMask
dplyr_error_call <- dplyr$dplyr_error_call
dplyr_local_error_call <- dplyr$dplyr_local_error_call
dplyr_quosures <- dplyr$dplyr_quosures
# FIXME: Unneeded after https://github.com/tidyverse/dplyr/pull/6927?
dplyr_reconstruct_dispatch <- dplyr$dplyr_reconstruct_dispatch
eval_relocate <- dplyr$eval_relocate
eval_select_by <- dplyr$eval_select_by
expand_across <- dplyr$expand_across
Expand Down
2 changes: 1 addition & 1 deletion R/filter.R
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ filter.duckplyr_df <- function(.data, ..., .by = NULL, .preserve = FALSE) {
rel <- duckdb_rel_from_df(.data)
out_rel <- rel_filter(rel, exprs)
out <- rel_to_df(out_rel)
out <- dplyr_reconstruct(out, .data)
out <- dplyr_reconstruct_dispatch(out, .data)
return(out)
}
)
Expand Down
2 changes: 1 addition & 1 deletion R/head.R
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ head.duckplyr_df <- function(x, n = 6L, ...) {
rel <- duckdb_rel_from_df(x)
out_rel <- rel_limit(rel, n)
out <- rel_to_df(out_rel)
dplyr_reconstruct(out, x)
dplyr_reconstruct_dispatch(out, x)
}
2 changes: 1 addition & 1 deletion R/intersect.R
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ intersect.duckplyr_df <- function(x, y, ...) {

rel <- rel_set_intersect(x_rel, y_rel)
out <- rel_to_df(rel)
out <- dplyr_reconstruct(out, x)
out <- dplyr_reconstruct_dispatch(out, x)
return(out)
}
)
Expand Down
2 changes: 1 addition & 1 deletion R/mutate.R
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ mutate.duckplyr_df <- function(.data, ..., .by = NULL, .keep = c("all", "used",

out <- rel_to_df(rel)

out <- dplyr_reconstruct(out, .data)
out <- dplyr_reconstruct_dispatch(out, .data)

names_original <- names(.data)

Expand Down
2 changes: 1 addition & 1 deletion R/project.R
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ nexprs <- function(names) {
exprs_project <- function(rel, exprs, .data) {
out_rel <- rel_project(rel, exprs)
out <- rel_to_df(out_rel)
dplyr_reconstruct(out, .data)
dplyr_reconstruct_dispatch(out, .data)
}
4 changes: 2 additions & 2 deletions R/setdiff.R
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ setdiff.duckplyr_df <- function(x, y, ...) {

rel <- rel_set_diff(x_rel, y_rel)
out <- rel_to_df(rel)
out <- dplyr_reconstruct(out, x)
out <- dplyr_reconstruct_dispatch(out, x)
return(out)
}
)
Expand All @@ -42,7 +42,7 @@ setdiff.duckplyr_df <- function(x, y, ...) {

out <- vec_set_difference(x, y, error_call = current_env())

dplyr_reconstruct(out, x)
dplyr_reconstruct_dispatch(out, x)
}

duckplyr_setdiff <- function(x, y, ...) {
Expand Down
4 changes: 2 additions & 2 deletions R/symdiff.R
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ symdiff.duckplyr_df <- function(x, y, ...) {

rel <- rel_set_symdiff(x_rel, y_rel)
out <- rel_to_df(rel)
out <- dplyr_reconstruct(out, x)
out <- dplyr_reconstruct_dispatch(out, x)
return(out)
}
)
Expand All @@ -42,7 +42,7 @@ symdiff.duckplyr_df <- function(x, y, ...) {

out <- vec_set_symmetric_difference(x, y, error_call = current_env())

dplyr_reconstruct(out, x)
dplyr_reconstruct_dispatch(out, x)
}

duckplyr_symdiff <- function(x, y, ...) {
Expand Down
2 changes: 1 addition & 1 deletion R/transmute.R
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ transmute.duckplyr_df <- function(.data, ...) {
rel <- duckdb_rel_from_df(.data)
out_rel <- rel_project(rel, exprs)
out <- rel_to_df(out_rel)
out <- dplyr_reconstruct(out, .data)
out <- dplyr_reconstruct_dispatch(out, .data)
return(out)
}
)
Expand Down
16 changes: 7 additions & 9 deletions README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,16 @@ It also defines a set of generics that provide a low-level implementer's interfa

## Example

```{r load}
library(conflicted)
library(duckplyr)
conflict_prefer("filter", "duckplyr")
```

There are two ways to use duckplyr.

1. To enable for individual data frames, use `as_duckplyr_df()` as the first step in your pipe.
1. To enable for the entire session, use `methods_override()`.
1. To enable for the entire session, use `methods_overwrite()`.

The examples below illustrate both methods.
See also the companion [demo repository](https://github.com/Tmonster/duckplyr_demo) for a use case with a large dataset.
Expand All @@ -41,10 +47,6 @@ See also the companion [demo repository](https://github.com/Tmonster/duckplyr_de
This example illustrates usage of duckplyr for individual data frames.

```{r individual}
library(conflicted)
library(duckplyr)
conflict_prefer("filter", "duckplyr")

# Use `as_duckplyr_df()` to enable processing with duckdb:
out <-
palmerpenguins::penguins %>%
Expand Down Expand Up @@ -79,10 +81,6 @@ out
This example illustrates usage of duckplyr for all data frames in the R session.

```{r session}
library(conflicted)
library(duckplyr)
conflict_prefer("filter", "duckplyr")

# Use `methods_overwrite()` to enable processing with duckdb for all data frames:
methods_overwrite()

Expand Down
33 changes: 14 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,17 @@ The goal of duckplyr is to provide a drop-in replacement for dplyr that uses Duc

## Example

<pre class='chroma'>
<span><span class='kr'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='o'>(</span><span class='nv'><a href='https://conflicted.r-lib.org/'>conflicted</a></span><span class='o'>)</span></span>
<span><span class='kr'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='o'>(</span><span class='nv'><a href='https://github.com/duckdblabs/duckplyr'>duckplyr</a></span><span class='o'>)</span></span>
<span><span class='nf'><a href='https://conflicted.r-lib.org/reference/conflict_prefer.html'>conflict_prefer</a></span><span class='o'>(</span><span class='s'>"filter"</span>, <span class='s'>"duckplyr"</span><span class='o'>)</span></span>
<span><span class='c'>#&gt; <span style='color: #555555;'>[conflicted]</span> Will prefer <span style='color: #0000BB; font-weight: bold;'>duckplyr</span>::filter over</span></span>
<span><span class='c'>#&gt; any other package.</span></span></pre>

There are two ways to use duckplyr.

1. To enable for individual data frames, use `as_duckplyr_df()` as the first step in your pipe.
2. To enable for the entire session, use `methods_override()`.
1. To enable for individual data frames, use [`as_duckplyr_df()`](https://rdrr.io/pkg/duckplyr/man/as_duckplyr_df.html) as the first step in your pipe.
2. To enable for the entire session, use [`methods_overwrite()`](https://rdrr.io/pkg/duckplyr/man/methods_overwrite.html).

The examples below illustrate both methods. See also the companion [demo repository](https://github.com/Tmonster/duckplyr_demo) for a use case with a large dataset.

Expand All @@ -24,18 +31,12 @@ The examples below illustrate both methods. See also the companion [demo reposit
This example illustrates usage of duckplyr for individual data frames.

<pre class='chroma'>
<span><span class='kr'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='o'>(</span><span class='nv'><a href='https://conflicted.r-lib.org/'>conflicted</a></span><span class='o'>)</span></span>
<span><span class='kr'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='o'>(</span><span class='nv'><a href='https://github.com/duckdblabs/duckplyr'>duckplyr</a></span><span class='o'>)</span></span>
<span><span class='nf'><a href='https://conflicted.r-lib.org/reference/conflict_prefer.html'>conflict_prefer</a></span><span class='o'>(</span><span class='s'>"filter"</span>, <span class='s'>"duckplyr"</span><span class='o'>)</span></span>
<span><span class='c'>#&gt; <span style='color: #555555;'>[conflicted]</span> Will prefer <span style='color: #0000BB; font-weight: bold;'>duckplyr</span>::filter over</span></span>
<span><span class='c'>#&gt; any other package.</span></span>
<span></span>
<span><span class='c'># Use `as_duckplyr_df()` to enable processing with duckdb:</span></span>
<span><span class='nv'>out</span> <span class='o'>&lt;-</span></span>
<span> <span class='nf'>palmerpenguins</span><span class='nf'>::</span><span class='nv'><a href='https://allisonhorst.github.io/palmerpenguins/reference/penguins.html'>penguins</a></span> <span class='o'>%&gt;%</span></span>
<span> <span class='c'># CAVEAT: factor columns are not supported yet</span></span>
<span> <span class='nf'><a href='https://dplyr.tidyverse.org/reference/mutate.html'>mutate</a></span><span class='o'>(</span><span class='nf'><a href='https://dplyr.tidyverse.org/reference/across.html'>across</a></span><span class='o'>(</span><span class='nf'>where</span><span class='o'>(</span><span class='nv'>is.factor</span><span class='o'>)</span>, <span class='nv'>as.character</span><span class='o'>)</span><span class='o'>)</span> <span class='o'>%&gt;%</span></span>
<span> <span class='nf'>as_duckplyr_df</span><span class='o'>(</span><span class='o'>)</span> <span class='o'>%&gt;%</span></span>
<span> <span class='nf'><a href='https://rdrr.io/pkg/duckplyr/man/as_duckplyr_df.html'>as_duckplyr_df</a></span><span class='o'>(</span><span class='o'>)</span> <span class='o'>%&gt;%</span></span>
<span> <span class='nf'><a href='https://dplyr.tidyverse.org/reference/mutate.html'>mutate</a></span><span class='o'>(</span>bill_area <span class='o'>=</span> <span class='nv'>bill_length_mm</span> <span class='o'>*</span> <span class='nv'>bill_depth_mm</span><span class='o'>)</span> <span class='o'>%&gt;%</span></span>
<span> <span class='nf'><a href='https://dplyr.tidyverse.org/reference/summarise.html'>summarize</a></span><span class='o'>(</span>.by <span class='o'>=</span> <span class='nf'><a href='https://rdrr.io/r/base/c.html'>c</a></span><span class='o'>(</span><span class='nv'>species</span>, <span class='nv'>sex</span><span class='o'>)</span>, mean_bill_area <span class='o'>=</span> <span class='nf'><a href='https://rdrr.io/r/base/mean.html'>mean</a></span><span class='o'>(</span><span class='nv'>bill_area</span><span class='o'>)</span><span class='o'>)</span> <span class='o'>%&gt;%</span></span>
<span> <span class='nf'><a href='https://dplyr.tidyverse.org/reference/filter.html'>filter</a></span><span class='o'>(</span><span class='nv'>species</span> <span class='o'>!=</span> <span class='s'>"Gentoo"</span><span class='o'>)</span></span>
Expand Down Expand Up @@ -101,7 +102,7 @@ This example illustrates usage of duckplyr for individual data frames.
<span><span class='c'>#&gt; Filter [!=(species, 'Gentoo')]</span></span>
<span><span class='c'>#&gt; Aggregate [species, sex, mean(bill_area)]</span></span>
<span><span class='c'>#&gt; Projection [species as species, island as island, bill_length_mm as bill_length_mm, bill_depth_mm as bill_depth_mm, flipper_length_mm as flipper_length_mm, body_mass_g as body_mass_g, sex as sex, "year" as year, *(bill_length_mm, bill_depth_mm) as bill_area]</span></span>
<span><span class='c'>#&gt; r_dataframe_scan(0x12c262098)</span></span>
<span><span class='c'>#&gt; r_dataframe_scan(0x11376a9c8)</span></span>
<span><span class='c'>#&gt; </span></span>
<span><span class='c'>#&gt; ---------------------</span></span>
<span><span class='c'>#&gt; -- Result Columns --</span></span>
Expand Down Expand Up @@ -129,14 +130,8 @@ This example illustrates usage of duckplyr for individual data frames.
This example illustrates usage of duckplyr for all data frames in the R session.

<pre class='chroma'>
<span><span class='kr'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='o'>(</span><span class='nv'><a href='https://conflicted.r-lib.org/'>conflicted</a></span><span class='o'>)</span></span>
<span><span class='kr'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='o'>(</span><span class='nv'><a href='https://github.com/duckdblabs/duckplyr'>duckplyr</a></span><span class='o'>)</span></span>
<span><span class='nf'><a href='https://conflicted.r-lib.org/reference/conflict_prefer.html'>conflict_prefer</a></span><span class='o'>(</span><span class='s'>"filter"</span>, <span class='s'>"duckplyr"</span><span class='o'>)</span></span>
<span><span class='c'>#&gt; <span style='color: #555555;'>[conflicted]</span> Removing existing preference.</span></span>
<span><span class='c'>#&gt; <span style='color: #555555;'>[conflicted]</span> Will prefer <span style='color: #0000BB; font-weight: bold;'>duckplyr</span>::filter over any other package.</span></span>
<span></span>
<span><span class='c'># Use `methods_overwrite()` to enable processing with duckdb for all data frames:</span></span>
<span><span class='nf'>methods_overwrite</span><span class='o'>(</span><span class='o'>)</span></span>
<span><span class='nf'><a href='https://rdrr.io/pkg/duckplyr/man/methods_overwrite.html'>methods_overwrite</a></span><span class='o'>(</span><span class='o'>)</span></span>
<span></span>
<span><span class='c'># This is the same query as above, without `as_duckplyr_df()`:</span></span>
<span><span class='nv'>out</span> <span class='o'>&lt;-</span></span>
Expand All @@ -160,7 +155,7 @@ This example illustrates usage of duckplyr for all data frames in the R session.
<span><span class='c'>#&gt; Filter [!=(species, 'Gentoo')]</span></span>
<span><span class='c'>#&gt; Aggregate [species, sex, mean(bill_area)]</span></span>
<span><span class='c'>#&gt; Projection [species as species, island as island, bill_length_mm as bill_length_mm, bill_depth_mm as bill_depth_mm, flipper_length_mm as flipper_length_mm, body_mass_g as body_mass_g, sex as sex, "year" as year, *(bill_length_mm, bill_depth_mm) as bill_area]</span></span>
<span><span class='c'>#&gt; r_dataframe_scan(0x12b737008)</span></span>
<span><span class='c'>#&gt; r_dataframe_scan(0x107975d58)</span></span>
<span><span class='c'>#&gt; </span></span>
<span><span class='c'>#&gt; ---------------------</span></span>
<span><span class='c'>#&gt; -- Result Columns --</span></span>
Expand All @@ -171,7 +166,7 @@ This example illustrates usage of duckplyr for all data frames in the R session.
<span><span class='c'>#&gt; [1] 5</span></span>
<span></span>
<span><span class='c'># Restart R, or call `methods_restore()` to revert to the default dplyr implementation.</span></span>
<span><span class='nf'>methods_restore</span><span class='o'>(</span><span class='o'>)</span></span>
<span><span class='nf'><a href='https://rdrr.io/pkg/duckplyr/man/methods_overwrite.html'>methods_restore</a></span><span class='o'>(</span><span class='o'>)</span></span>
<span></span>
<span><span class='c'># dplyr is active again:</span></span>
<span><span class='nf'>palmerpenguins</span><span class='nf'>::</span><span class='nv'><a href='https://allisonhorst.github.io/palmerpenguins/reference/penguins.html'>penguins</a></span> <span class='o'>%&gt;%</span></span>
Expand Down
4 changes: 2 additions & 2 deletions patch/arrange.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git b/R/arrange.R a/R/arrange.R
index 5576a435..7c6af81 100644
index 5576a435..e93ac61 100644
--- b/R/arrange.R
+++ a/R/arrange.R
@@ -1,10 +1,28 @@
Expand Down Expand Up @@ -29,7 +29,7 @@ index 5576a435..7c6af81 100644
+ exprs <- rel_translate_dots(dots, .data)
+ out_rel <- rel_order(rel, exprs)
+ out <- rel_to_df(out_rel)
+ out <- dplyr_reconstruct(out, .data)
+ out <- dplyr_reconstruct_dispatch(out, .data)
return(out)
}
)
13 changes: 11 additions & 2 deletions patch/count.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git b/R/count.R a/R/count.R
index 0b85569..ea3d310 100644
index 0b85569..75e66b2 100644
--- b/R/count.R
+++ a/R/count.R
@@ -1,14 +1,51 @@
Expand Down Expand Up @@ -44,7 +44,7 @@ index 0b85569..ea3d310 100644
+ }
+
+ out <- rel_to_df(out_rel)
+ out <- dplyr_reconstruct(out, x)
+ out <- dplyr_reconstruct_dispatch(out, x)
+
return(out)
}
Expand All @@ -56,3 +56,12 @@ index 0b85569..ea3d310 100644
# dplyr forward
count <- dplyr$count.data.frame
out <- count(x, ..., wt = {{ wt }}, sort = sort, name = name, .drop = .drop)
@@ -26,7 +63,7 @@ count.duckplyr_df <- function(x, ..., wt = NULL, sort = FALSE, name = NULL, .dro
out <- tally(out, wt = !!enquo(wt), sort = sort, name = name)

# Ensure grouping is transient
- out <- dplyr_reconstruct(out, x)
+ out <- dplyr_reconstruct_dispatch(out, x)

out
}
4 changes: 2 additions & 2 deletions patch/distinct.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git b/R/distinct.R a/R/distinct.R
index 8628a27..8a532d1 100644
index 8628a27..34950d4 100644
--- b/R/distinct.R
+++ a/R/distinct.R
@@ -1,10 +1,66 @@
Expand Down Expand Up @@ -66,7 +66,7 @@ index 8628a27..8a532d1 100644
+ }
+
+ out <- rel_to_df(out_rel)
+ out <- dplyr_reconstruct(out, .data)
+ out <- dplyr_reconstruct_dispatch(out, .data)
return(out)
}
)
4 changes: 2 additions & 2 deletions patch/filter.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git b/R/filter.R a/R/filter.R
index 787a374..f3c8689 100644
index 787a374..ef3e258 100644
--- b/R/filter.R
+++ a/R/filter.R
@@ -1,10 +1,28 @@
Expand Down Expand Up @@ -30,7 +30,7 @@ index 787a374..f3c8689 100644
+ rel <- duckdb_rel_from_df(.data)
+ out_rel <- rel_filter(rel, exprs)
+ out <- rel_to_df(out_rel)
+ out <- dplyr_reconstruct(out, .data)
+ out <- dplyr_reconstruct_dispatch(out, .data)
return(out)
}
)
4 changes: 2 additions & 2 deletions patch/intersect.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git b/R/intersect.R a/R/intersect.R
index e080cd6..1b1eff9 100644
index e080cd6..dc776de 100644
--- b/R/intersect.R
+++ a/R/intersect.R
@@ -2,9 +2,31 @@
Expand Down Expand Up @@ -31,7 +31,7 @@ index e080cd6..1b1eff9 100644
+
+ rel <- rel_set_intersect(x_rel, y_rel)
+ out <- rel_to_df(rel)
+ out <- dplyr_reconstruct(out, x)
+ out <- dplyr_reconstruct_dispatch(out, x)
return(out)
}
)
4 changes: 2 additions & 2 deletions patch/mutate.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git b/R/mutate.R a/R/mutate.R
index 50437cc..d67fbf2 100644
index 50437cc..b08c7b6 100644
--- b/R/mutate.R
+++ a/R/mutate.R
@@ -1,10 +1,75 @@
Expand Down Expand Up @@ -54,7 +54,7 @@ index 50437cc..d67fbf2 100644
+
+ out <- rel_to_df(rel)
+
+ out <- dplyr_reconstruct(out, .data)
+ out <- dplyr_reconstruct_dispatch(out, .data)
+
+ names_original <- names(.data)
+
Expand Down
13 changes: 11 additions & 2 deletions patch/setdiff.patch
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git b/R/setdiff.R a/R/setdiff.R
index 314dcd7..cee2eb1 100644
index 314dcd7..f360627 100644
--- b/R/setdiff.R
+++ a/R/setdiff.R
@@ -2,9 +2,31 @@
Expand Down Expand Up @@ -31,7 +31,16 @@ index 314dcd7..cee2eb1 100644
+
+ rel <- rel_set_diff(x_rel, y_rel)
+ out <- rel_to_df(rel)
+ out <- dplyr_reconstruct(out, x)
+ out <- dplyr_reconstruct_dispatch(out, x)
return(out)
}
)
@@ -20,7 +42,7 @@ setdiff.duckplyr_df <- function(x, y, ...) {

out <- vec_set_difference(x, y, error_call = current_env())

- dplyr_reconstruct(out, x)
+ dplyr_reconstruct_dispatch(out, x)
}

duckplyr_setdiff <- function(x, y, ...) {
Loading
Loading