Fairly self-explanatory - rows_upsert() helpfully errors in such cases but the check seems to have been omitted in rows_insert():
library(dplyr, warn.conflicts = FALSE)
df1 <- tibble(x = 1:3, y = 2:4)
df2 <- tibble(x = 4:6)
# rows_insert() ignores "y"
rows_insert(df1, df2, by = c("x", "y"))
#> # A tibble: 6 × 2
#> x y
#> <int> <int>
#> 1 1 2
#> 2 2 3
#> 3 3 4
#> 4 4 NA
#> 5 5 NA
#> 6 6 NA
# rows_update() helpfully errors
rows_update(df1, df2, by = c("x", "y"))
#> Error in `rows_update()`:
#> ! All columns specified through `by` must exist in `x` and `y`.
#> ℹ The following columns are missing from `y`: `y`.
#> Backtrace:
#> ▆
#> 1. ├─dplyr::rows_update(df1, df2, by = c("x", "y"))
#> 2. └─dplyr:::rows_update.data.frame(df1, df2, by = c("x", "y"))
#> 3. └─dplyr:::rows_select_key(y, by, "y", unique = TRUE)
#> 4. └─rlang::abort(message, call = error_call)
Created on 2023-01-23 with reprex v2.0.2
Fairly self-explanatory -
rows_upsert()helpfully errors in such cases but the check seems to have been omitted inrows_insert():Created on 2023-01-23 with reprex v2.0.2