27
27
# ' @examples
28
28
# '
29
29
# ' # On numeric vectors:
30
- # ' approx_equal (
30
+ # ' vec_approx_equal (
31
31
# ' c(1, 2, 3, NA),
32
32
# ' c(1, 2 + 1e-10, NA, NA),
33
33
# ' na_equal = TRUE,
49
49
# ' tbl2$c$c1[[4]] <- tbl1$c$c1[[4]] + 1e-10
50
50
# ' tbl2$d[[5, 2]] <- tbl1$d[[5, 2]] + 1e-10
51
51
# ' vctrs::vec_equal(tbl1, tbl2, na_equal = TRUE)
52
- # ' approx_equal (tbl1, tbl2, na_equal = TRUE, abs_tol = 1e-12)
53
- # ' approx_equal (tbl1, tbl2, na_equal = TRUE, abs_tol = 1e-8)
52
+ # ' vec_approx_equal (tbl1, tbl2, na_equal = TRUE, abs_tol = 1e-12)
53
+ # ' vec_approx_equal (tbl1, tbl2, na_equal = TRUE, abs_tol = 1e-8)
54
54
# '
55
55
# '
56
56
# '
57
57
# '
58
58
# '
59
59
# ' # Type comparison within lists is stricter, matching vctrs:
60
60
# ' vctrs::vec_equal(list(1:2), list(as.numeric(1:2)))
61
- # ' approx_equal (list(1:2), list(as.numeric(1:2)), FALSE, abs_tol = 0)
61
+ # ' vec_approx_equal (list(1:2), list(as.numeric(1:2)), FALSE, abs_tol = 0)
62
62
# '
63
63
# ' @export
64
- approx_equal <- function (vec1 , vec2 , na_equal , .ptype = NULL , ... , abs_tol , inds1 = NULL , inds2 = NULL ) {
64
+ vec_approx_equal <- function (vec1 , vec2 , na_equal , .ptype = NULL , ... , abs_tol , inds1 = NULL , inds2 = NULL ) {
65
65
if (! obj_is_vector(vec1 )) cli_abort(" `vec1` must be recognized by vctrs as a vector" )
66
66
if (! obj_is_vector(vec2 )) cli_abort(" `vec2` must be recognized by vctrs as a vector" )
67
67
# Leave vec size checking to vctrs recycling ops.
@@ -99,13 +99,13 @@ approx_equal <- function(vec1, vec2, na_equal, .ptype = NULL, ..., abs_tol, inds
99
99
inds2 <- vec_recycle(inds2 , common_size )
100
100
}
101
101
vecs <- vec_cast_common(vec1 , vec2 , .to = .ptype )
102
- approx_equal0 (vecs [[1 ]], vecs [[2 ]], na_equal , abs_tol , inds1 , inds2 )
102
+ vec_approx_equal0 (vecs [[1 ]], vecs [[2 ]], na_equal , abs_tol , inds1 , inds2 )
103
103
}
104
104
105
- # ' Helper for [`approx_equal `] for vecs guaranteed to have the same ptype and size
105
+ # ' Helper for [`vec_approx_equal `] for vecs guaranteed to have the same ptype and size
106
106
# '
107
107
# ' @keywords internal
108
- approx_equal0 <- function (vec1 , vec2 , na_equal , abs_tol , inds1 = NULL , inds2 = NULL ) {
108
+ vec_approx_equal0 <- function (vec1 , vec2 , na_equal , abs_tol , inds1 = NULL , inds2 = NULL ) {
109
109
if (is_bare_numeric(vec1 ) && abs_tol != 0 ) {
110
110
# perf: since we're working with bare numerics and logicals: we can use `[`
111
111
# and `fifelse`. Matching vec_equal, we ignore names and other attributes.
@@ -132,7 +132,7 @@ approx_equal0 <- function(vec1, vec2, na_equal, abs_tol, inds1 = NULL, inds2 = N
132
132
rep(TRUE , nrow(vec1 ))
133
133
} else {
134
134
Reduce(`&` , lapply(seq_len(ncol(vec1 )), function (col_i ) {
135
- approx_equal0 (vec1 [[col_i ]], vec2 [[col_i ]], na_equal , abs_tol , inds1 , inds2 )
135
+ vec_approx_equal0 (vec1 [[col_i ]], vec2 [[col_i ]], na_equal , abs_tol , inds1 , inds2 )
136
136
}))
137
137
}
138
138
} else if (is_bare_list(vec1 )) {
@@ -144,14 +144,14 @@ approx_equal0 <- function(vec1, vec2, na_equal, abs_tol, inds1 = NULL, inds2 = N
144
144
# consistently inconsistent, we avoid dispatching to vec_equal for bare
145
145
# lists even with abs_tol = 0:
146
146
identical(vec_ptype(entry1 ), vec_ptype(entry2 )) &&
147
- all(approx_equal0 (entry1 , entry2 , na_equal , abs_tol ))
147
+ all(vec_approx_equal0 (entry1 , entry2 , na_equal , abs_tol ))
148
148
}, logical (1L ))
149
149
} else {
150
150
# XXX No special handling for any other types/situations. Makes sense for
151
151
# unclassed atomic things; custom classes (e.g., distributions) might want
152
- # recursion / specialization, though. approx_equal0 should probably be an S3
152
+ # recursion / specialization, though. vec_approx_equal0 should probably be an S3
153
153
# method. Also, abs_tol == 0 --> vec_equal logic should maybe be either be
154
- # hoisted to approx_equal or we should manually recurse on data frames even
154
+ # hoisted to vec_approx_equal or we should manually recurse on data frames even
155
155
# with abs_tol = 0 when that's faster (might depend on presence of inds*),
156
156
# after some inconsistencies are ironed out.
157
157
if (! is.null(inds1 )) {
@@ -265,7 +265,7 @@ tbl_diff2 <- function(earlier_snapshot, later_tbl,
265
265
# Which rows from combined are in case 3.?
266
266
combined_compactify_away <- rep(FALSE , combined_n )
267
267
combined_compactify_away [combined_ukey_is_repeat ] <-
268
- approx_equal0 (combined_vals ,
268
+ vec_approx_equal0 (combined_vals ,
269
269
combined_vals ,
270
270
na_equal = TRUE ,
271
271
abs_tol = compactify_abs_tol ,
@@ -340,5 +340,3 @@ tbl_patch <- function(snapshot, update, ukey_names) {
340
340
341
341
result_tbl
342
342
}
343
-
344
- # TODO rename approx_equal to vec_approx_equal
0 commit comments