Skip to content

Commit 6eb0b37

Browse files
jonkeaneassignUser
andauthored
apacheGH-41402: [CI][R] Update our backwards compatibility CI any other R 4.4 cleanups (apache#41403)
### Rationale for this change Keep up with the state of the world, ensure we are maintaining backwards compatibility. Resolves apache#41402 ### What changes are included in this PR? * Bump to 4.4 as the release * Remove old 3.6 jobs now that we no longer support that; clean up code where we hardcode things fro 3.6 and below * Move many of our CI jobs to [rhub's new containers](https://github.com/r-hub/containers). We were accidentally running stale R devel (from December 2023) because the other rhub images stopped being updated. (One exception to be done as a follow on: apache#41416) * Resolve a number of extended test failures With this PR R extended tests should be all green with the exceptions of: * Two sanitizer jobs (test-fedora-r-clang-sanitizer, test-ubuntu-r-sanitizer) — which are being investigated / fixed in apache#41421 * Valgrind — I'm running one last run with a new suppression file. * Binary jobs — these work but fail at upload, see apache#41403 (comment) * Windows R Release — failing on main, apache#41398 ### Are these changes tested? By definition. ### Are there any user-facing changes? No. * GitHub Issue: apache#41402 Lead-authored-by: Jonathan Keane <[email protected]> Co-authored-by: Jacob Wujciak-Jens <[email protected]> Signed-off-by: Jonathan Keane <[email protected]>
1 parent ff67979 commit 6eb0b37

31 files changed

+139
-164
lines changed

.env

+3-3
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ NUMBA=latest
7171
NUMPY=latest
7272
PANDAS=latest
7373
PYTHON=3.8
74-
R=4.2
74+
R=4.4
7575
SPARK=master
7676
TURBODBC=latest
7777

78-
# These correspond to images on Docker Hub that contain R, e.g. rhub/ubuntu-gcc-release:latest
79-
R_IMAGE=ubuntu-gcc-release
78+
# These correspond to images on Docker Hub that contain R, e.g. rhub/ubuntu-release:latest
79+
R_IMAGE=ubuntu-release
8080
R_ORG=rhub
8181
R_TAG=latest
8282

.github/workflows/r.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ jobs:
121121
strategy:
122122
fail-fast: false
123123
matrix:
124-
r: ["4.3"]
124+
r: ["4.4"]
125125
ubuntu: [20.04]
126126
force-tests: ["true"]
127127
env:
@@ -192,7 +192,7 @@ jobs:
192192
fail-fast: false
193193
matrix:
194194
config:
195-
- { org: "rhub", image: "debian-gcc-devel", tag: "latest", devtoolset: "" }
195+
- { org: "rhub", image: "ubuntu-gcc12", tag: "latest", devtoolset: "" }
196196
env:
197197
R_ORG: ${{ matrix.config.org }}
198198
R_IMAGE: ${{ matrix.config.image }}

ci/docker/linux-apt-docs.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
ARG base
1919
FROM ${base}
2020

21-
ARG r=4.2
21+
ARG r=4.4
2222
ARG jdk=8
2323

2424
# See R install instructions at https://cloud.r-project.org/bin/linux/ubuntu/

ci/docker/linux-apt-lint.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ RUN apt-get update && \
4040
&& apt-get clean \
4141
&& rm -rf /var/lib/apt/lists/*
4242

43-
ARG r=4.2
43+
ARG r=4.4
4444
RUN wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | \
4545
tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc && \
4646
# NOTE: Only R >= 4.0 is available in this repo

ci/docker/linux-apt-r.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ ENV LANG=C.UTF-8
3535
# Build R
3636
# [1] https://www.digitalocean.com/community/tutorials/how-to-install-r-on-ubuntu-18-04
3737
# [2] https://linuxize.com/post/how-to-install-r-on-ubuntu-18-04/#installing-r-packages-from-cran
38-
ARG r=3.6
38+
ARG r=4.4
3939
RUN apt-get update -y && \
4040
apt-get install -y \
4141
dirmngr \

ci/etc/valgrind-cran.supp

+19-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
# under the License.
1717

1818
{
19-
# `testthat::skip()`s cause a valgrind error that does not show up on CRAN.
19+
# `testthat::skip()`s cause a valgrind error that does not show up on CRAN.
2020
<testthat_skip_error>
2121
Memcheck:Cond
2222
fun:gregexpr_Regexc
@@ -32,3 +32,21 @@
3232
fun:getvar
3333
fun:bcEval
3434
}
35+
{
36+
# This also doesn't seem to cause issues on CRAN, so suppress it.
37+
<Memcheck_possible_leak>
38+
Memcheck:Leak
39+
match-leak-kinds: possible
40+
fun:malloc
41+
fun:libdeflate_alloc_compressor
42+
fun:do_memCompress
43+
fun:bcEval_loop
44+
fun:bcEval
45+
fun:Rf_eval
46+
fun:R_execClosure
47+
fun:applyClosure_core
48+
fun:Rf_applyClosure
49+
fun:Rf_eval
50+
fun:do_set
51+
fun:Rf_eval
52+
}

ci/scripts/r_sanitize.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export UBSAN_OPTIONS="print_stacktrace=1,suppressions=/arrow/r/tools/ubsan.supp"
4949

5050
# run tests
5151
pushd tests
52-
${R_BIN} < testthat.R > testthat.out 2>&1 || { cat testthat.out; exit 1; }
52+
${R_BIN} --no-save < testthat.R > testthat.out 2>&1 || { cat testthat.out; exit 1; }
5353

5454
cat testthat.out
5555
if grep -q "runtime error" testthat.out; then
@@ -58,7 +58,7 @@ fi
5858

5959
# run examples
6060
popd
61-
${R_BIN} -e 'library(arrow); testthat::test_examples(".")' >> examples.out 2>&1 || { cat examples.out; exit 1; }
61+
${R_BIN} --no-save -e 'library(arrow); testthat::test_examples(".")' >> examples.out 2>&1 || { cat examples.out; exit 1; }
6262

6363
cat examples.out
6464
if grep -q "runtime error" examples.out; then

ci/scripts/r_test.sh

+6-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ if [ "$ARROW_USE_PKG_CONFIG" != "false" ]; then
4646
export LD_LIBRARY_PATH=${ARROW_HOME}/lib:${LD_LIBRARY_PATH}
4747
export R_LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
4848
fi
49-
export _R_CHECK_COMPILATION_FLAGS_KNOWN_=${ARROW_R_CXXFLAGS}
49+
50+
export _R_CHECK_COMPILATION_FLAGS_KNOWN_="${_R_CHECK_COMPILATION_FLAGS_KNOWN_} ${ARROW_R_CXXFLAGS}"
51+
# These should generally be picked up, but are slightly wrong in rhub's containers it appears
52+
# https://github.com/r-hub/containers/pull/63
53+
export _R_CHECK_COMPILATION_FLAGS_KNOWN_="${_R_CHECK_COMPILATION_FLAGS_KNOWN_} -Wno-parentheses -Werror=format-security -Wp,-D_FORTIFY_SOURCE=3"
54+
5055
if [ "$ARROW_R_DEV" = "TRUE" ]; then
5156
# These are sometimes used in the Arrow C++ build and are not a problem
5257
export _R_CHECK_COMPILATION_FLAGS_KNOWN_="${_R_CHECK_COMPILATION_FLAGS_KNOWN_} -Wno-attributes -msse4.2 -Wno-noexcept-type -Wno-subobject-linkage"

ci/scripts/r_valgrind.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ ${R_BIN} CMD INSTALL ${INSTALL_ARGS} arrow*.tar.gz
3333
pushd tests
3434

3535
# to generate suppression files run:
36-
# ${R_BIN} --vanilla -d "valgrind --tool=memcheck --leak-check=full --track-origins=yes --gen-suppressions=all --log-file=memcheck.log" -f testthat.supp
36+
# ${R_BIN} --vanilla -d "valgrind --tool=memcheck --leak-check=full --track-origins=yes --gen-suppressions=all --log-file=memcheck.log" -f testthat.R
3737
${R_BIN} --vanilla -d "valgrind --tool=memcheck --leak-check=full --track-origins=yes --suppressions=/${1}/ci/etc/valgrind-cran.supp" -f testthat.R |& tee testthat.out
3838

3939
# valgrind --error-exitcode=1 should return an erroring exit code that we can catch,

dev/tasks/r/github.linux.arrow.version.back.compat.yml

+2
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ jobs:
7373
config:
7474
# We use the R version that was released at the time of the arrow release in order
7575
# to make sure we can download binaries from RSPM.
76+
- { old_arrow_version: '14.0.2.1', r: '4.3' }
77+
- { old_arrow_version: '13.0.0.1', r: '4.3' }
7678
- { old_arrow_version: '12.0.1.1', r: '4.3' }
7779
- { old_arrow_version: '11.0.0.3', r: '4.2' }
7880
- { old_arrow_version: '10.0.1', r: '4.2' }

dev/tasks/r/github.linux.offline.build.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ jobs:
8484
{{ macros.github_set_sccache_envvars()|indent(8)}}
8585
run: |
8686
cd arrow/r
87-
R CMD INSTALL --install-tests --no-test-load --no-docs --no-help --no-byte-compile arrow_with_deps.tar.gz
87+
R CMD INSTALL --install-tests --no-test-load --no-byte-compile arrow_with_deps.tar.gz
8888
- name: Run the tests
8989
run: R -e 'if(tools::testInstalledPackage("arrow") != 0L) stop("There was a test failure.")'
9090
- name: Dump test logs

dev/tasks/r/github.linux.versions.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ jobs:
3030
r_version:
3131
# We test devel, release, and oldrel in regular CI.
3232
# This is for older versions
33-
- "3.6"
3433
- "4.0"
3534
- "4.1"
35+
- "4.2"
3636
env:
3737
R_ORG: "rstudio"
3838
R_IMAGE: "r-base"

dev/tasks/r/github.packages.yml

+4-6
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ jobs:
227227
working-directory: 'arrow'
228228
extra-packages: cpp11
229229
- name: Set CRAN like openssl
230-
if: contains(matrix.platform.runs_on, 'arm64')
230+
if: contains(matrix.platform.name, 'arm64')
231231
run: |
232232
# The arm64 runners contain openssl 1.1.1t in this path that is always included first so we need to override the
233233
# default setting of the brew --prefix as root dir to avoid version conflicts.
@@ -300,16 +300,14 @@ jobs:
300300
# an OS that is not in the allowlist, so we have to opt-in to use the
301301
# binary. Other env vars used in r_docker_configure.sh can be added
302302
# here (like devtoolset) and wired up in the later steps.
303-
- {image: "rhub/debian-clang-devel", libarrow_binary: "TRUE"}
303+
- {image: "rhub/ubuntu-clang", libarrow_binary: "TRUE"}
304304
# fedora-clang-devel cannot use binaries bc of libc++ (uncomment to see the error)
305305
# - {image: "rhub/fedora-clang-devel", libarrow_binary: "TRUE"}
306-
- {image: "rhub/ubuntu-gcc-release"} # currently ubuntu-20.04 (focal)
307-
- {image: "rocker/r-ubuntu:22.04"} # openssl3
308-
- {image: "rocker/r-ver"} # whatever is latest ubuntu LTS
306+
- {image: "rhub/ubuntu-release"} # currently ubuntu-22.04
309307
- {image: "rocker/r-ver:4.0.0"} # ubuntu-20.04
310-
- {image: "rocker/r-ver:3.6.3", libarrow_binary: "TRUE"} # debian:buster (10)
311308
- {image: "rstudio/r-base:4.1-focal"} # ubuntu-20.04
312309
- {image: "rstudio/r-base:4.2-centos7", devtoolset: "8"}
310+
- {image: "rstudio/r-base:4.3-noble"}
313311
steps:
314312
# Get the arrow checkout just for the docker config scripts
315313
# Don't need submodules for this (hence false arg to macro): they fail on

dev/tasks/tasks.yml

+6-6
Original file line numberDiff line numberDiff line change
@@ -888,12 +888,12 @@ tasks:
888888
- r-lib__libarrow__bin__darwin-arm64-openssl-3.0__arrow-{no_rc_r_version}\.zip
889889
- r-lib__libarrow__bin__darwin-x86_64-openssl-1.1__arrow-{no_rc_r_version}\.zip
890890
- r-lib__libarrow__bin__darwin-x86_64-openssl-3.0__arrow-{no_rc_r_version}\.zip
891+
- r-pkg__bin__windows__contrib__4.4__arrow_{no_rc_r_version}\.zip
891892
- r-pkg__bin__windows__contrib__4.3__arrow_{no_rc_r_version}\.zip
892-
- r-pkg__bin__windows__contrib__4.2__arrow_{no_rc_r_version}\.zip
893+
- r-pkg__bin__macosx__big-sur-x86_64__contrib__4.4__arrow_{no_rc_r_version}\.tgz
893894
- r-pkg__bin__macosx__big-sur-x86_64__contrib__4.3__arrow_{no_rc_r_version}\.tgz
894-
- r-pkg__bin__macosx__contrib__4.2__arrow_{no_rc_r_version}\.tgz
895+
- r-pkg__bin__macosx__big-sur-arm64__contrib__4.4__arrow_{no_rc_r_version}\.tgz
895896
- r-pkg__bin__macosx__big-sur-arm64__contrib__4.3__arrow_{no_rc_r_version}\.tgz
896-
- r-pkg__bin__macosx__big-sur-arm64__contrib__4.2__arrow_{no_rc_r_version}\.tgz
897897
- r-pkg__src__contrib__arrow_{no_rc_r_version}\.tar\.gz
898898

899899

@@ -1356,7 +1356,7 @@ tasks:
13561356
r_tag: latest
13571357
r_custom_ccache: true
13581358

1359-
{% for r_org, r_image, r_tag in [("rhub", "ubuntu-gcc-release", "latest"),
1359+
{% for r_org, r_image, r_tag in [("rhub", "ubuntu-release", "latest"),
13601360
("rocker", "r-ver", "latest"),
13611361
("rstudio", "r-base", "4.2-focal"),
13621362
("rstudio", "r-base", "4.1-opensuse153")] %}
@@ -1377,9 +1377,9 @@ tasks:
13771377
template: r/azure.linux.yml
13781378
params:
13791379
r_org: rhub
1380-
r_image: debian-gcc-devel-lto
1380+
r_image: gcc13
13811381
r_tag: latest
1382-
flags: '-e NOT_CRAN=false -e INSTALL_ARGS=--use-LTO'
1382+
flags: '-e INSTALL_ARGS=--use-LTO'
13831383

13841384
# This one has -flto=auto
13851385
test-r-ubuntu-22.04:

docker-compose.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -1459,8 +1459,8 @@ services:
14591459
# (including building the C++ library) on any Docker image that contains R
14601460
#
14611461
# Usage:
1462-
# R_ORG=rhub R_IMAGE=ubuntu-gcc-release R_TAG=latest docker-compose build r
1463-
# R_ORG=rhub R_IMAGE=ubuntu-gcc-release R_TAG=latest docker-compose run r
1462+
# R_ORG=rhub R_IMAGE=ubuntu-release R_TAG=latest docker-compose build r
1463+
# R_ORG=rhub R_IMAGE=ubuntu-release R_TAG=latest docker-compose run r
14641464
image: ${REPO}:r-${R_ORG}-${R_IMAGE}-${R_TAG}
14651465
build:
14661466
context: .
@@ -1523,6 +1523,7 @@ services:
15231523
cache_from:
15241524
- ${REPO}:r-rhub-fedora-clang-devel-latest
15251525
args:
1526+
# TODO: change this to rhub/clang-asan
15261527
base: rhub/fedora-clang-devel-san
15271528
r_dev: ${ARROW_R_DEV}
15281529
devtoolset_version: ${DEVTOOLSET_VERSION}

r/DESCRIPTION

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Description: 'Apache' 'Arrow' <https://arrow.apache.org/> is a cross-language
2121
language-independent columnar memory format for flat and hierarchical data,
2222
organized for efficient analytic operations on modern hardware. This
2323
package provides an interface to the 'Arrow C++' library.
24-
Depends: R (>= 3.4)
24+
Depends: R (>= 4.0)
2525
License: Apache License (>= 2.0)
2626
URL: https://github.com/apache/arrow/, https://arrow.apache.org/docs/r/
2727
BugReports: https://github.com/apache/arrow/issues

r/R/dplyr-funcs-type.R

+1-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ register_bindings_type_cast <- function() {
140140
fix.empty.names = TRUE,
141141
stringsAsFactors = FALSE) {
142142
# we need a specific value of stringsAsFactors because the default was
143-
# TRUE in R <= 3.6
143+
# TRUE in R <= 3.6 and folks might still be cargoculting to stay in the past.
144144
if (!identical(stringsAsFactors, FALSE)) {
145145
arrow_not_supported("stringsAsFactors = TRUE")
146146
}

r/R/util.R

-14
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,6 @@
1515
# specific language governing permissions and limitations
1616
# under the License.
1717

18-
# for compatibility with R versions earlier than 4.0.0
19-
if (!exists("deparse1")) {
20-
deparse1 <- function(expr, collapse = " ", width.cutoff = 500L, ...) {
21-
paste(deparse(expr, width.cutoff, ...), collapse = collapse)
22-
}
23-
}
24-
25-
# for compatibility with R versions earlier than 3.6.0
26-
if (!exists("str2lang")) {
27-
str2lang <- function(s) {
28-
parse(text = s, keep.source = FALSE)[[1]]
29-
}
30-
}
31-
3218
oxford_paste <- function(x,
3319
conjunction = "and",
3420
quote = TRUE,

r/tests/testthat/test-Array.R

-5
Original file line numberDiff line numberDiff line change
@@ -818,11 +818,6 @@ test_that("Handling string data with embedded nuls", {
818818
)
819819
array_with_nul <- arrow_array(raws)$cast(utf8())
820820

821-
# The behavior of the warnings/errors is slightly different with and without
822-
# altrep. Without it (i.e. 3.5.0 and below, the error would trigger immediately
823-
# on `as.vector()` where as with it, the error only happens on materialization)
824-
skip_on_r_older_than("3.6")
825-
826821
# no error on conversion, because altrep laziness
827822
v <- expect_error(as.vector(array_with_nul), NA)
828823

r/tests/testthat/test-RecordBatch.R

+4-12
Original file line numberDiff line numberDiff line change
@@ -595,14 +595,10 @@ test_that("RecordBatch supports cbind", {
595595
)
596596

597597
# Rejects Table and ChunkedArray arguments
598-
if (getRversion() >= "4.0.0") {
599-
# R 3.6 cbind dispatch rules cause cbind to fall back to default impl if
600-
# there are multiple arguments with distinct cbind implementations
601-
expect_error(
602-
cbind(record_batch(a = 1:2), arrow_table(b = 3:4)),
603-
regexp = "Cannot cbind a RecordBatch with Tables or ChunkedArrays"
604-
)
605-
}
598+
expect_error(
599+
cbind(record_batch(a = 1:2), arrow_table(b = 3:4)),
600+
regexp = "Cannot cbind a RecordBatch with Tables or ChunkedArrays"
601+
)
606602
expect_error(
607603
cbind(record_batch(a = 1:2), b = chunked_array(1, 2)),
608604
regexp = "Cannot cbind a RecordBatch with Tables or ChunkedArrays"
@@ -622,10 +618,6 @@ test_that("Handling string data with embedded nuls", {
622618
batch_with_nul <- record_batch(a = 1:5, b = raws)
623619
batch_with_nul$b <- batch_with_nul$b$cast(utf8())
624620

625-
# The behavior of the warnings/errors is slightly different with and without
626-
# altrep. Without it (i.e. 3.5.0 and below, the error would trigger immediately
627-
# on `as.vector()` where as with it, the error only happens on materialization)
628-
skip_on_r_older_than("3.6")
629621
df <- as.data.frame(batch_with_nul)
630622

631623
expect_error(

r/tests/testthat/test-Table.R

-4
Original file line numberDiff line numberDiff line change
@@ -581,10 +581,6 @@ test_that("Table supports cbind", {
581581
})
582582

583583
test_that("cbind.Table handles record batches and tables", {
584-
# R 3.6 cbind dispatch rules cause cbind to fall back to default impl if
585-
# there are multiple arguments with distinct cbind implementations
586-
skip_if(getRversion() < "4.0.0", "R 3.6 cbind dispatch rules prevent this behavior")
587-
588584
expect_equal(
589585
cbind(arrow_table(a = 1L:2L), record_batch(b = 4:5)),
590586
arrow_table(a = 1L:2L, b = 4:5)

r/tests/testthat/test-altrep.R

+5-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
# specific language governing permissions and limitations
1616
# under the License.
1717

18-
skip_on_r_older_than("3.6")
19-
2018
test_that("altrep test functions do not include base altrep", {
2119
expect_false(is_arrow_altrep(1:10))
2220
expect_identical(test_arrow_altrep_is_materialized(1:10), NA)
@@ -373,6 +371,11 @@ test_that("altrep min/max/sum identical to R versions for double", {
373371
expect_altrep_roundtrip(x, max)
374372
expect_altrep_roundtrip(x, sum)
375373

374+
# On valgrind the NA_real_ is sometimes transformed to NaN
375+
# https://stat.ethz.ch/pipermail/r-devel/2021-April/080683.html
376+
# so we skip these there to avoid complicated NA == NaN logic,
377+
# and they are tested on a number of other platforms / conditions
378+
skip_on_linux_devel()
376379
x <- c(1, 2, NA_real_)
377380
expect_altrep_roundtrip(x, min, na.rm = TRUE)
378381
expect_altrep_roundtrip(x, max, na.rm = TRUE)

r/tests/testthat/test-chunked-array.R

-5
Original file line numberDiff line numberDiff line change
@@ -475,11 +475,6 @@ test_that("Handling string data with embedded nuls", {
475475
)
476476
chunked_array_with_nul <- ChunkedArray$create(raws)$cast(utf8())
477477

478-
# The behavior of the warnings/errors is slightly different with and without
479-
# altrep. Without it (i.e. 3.5.0 and below, the error would trigger immediately
480-
# on `as.vector()` where as with it, the error only happens on materialization)
481-
skip_on_r_older_than("3.6")
482-
483478
v <- expect_error(as.vector(chunked_array_with_nul), NA)
484479

485480
expect_error(

r/tests/testthat/test-dplyr-collapse.R

-10
Original file line numberDiff line numberDiff line change
@@ -185,16 +185,6 @@ See $.data for the source Arrow object",
185185
fixed = TRUE
186186
)
187187

188-
skip_if(getRversion() < "3.6.0", "TODO investigate why these aren't equal")
189-
# On older R versions:
190-
# ── Failure (test-dplyr-collapse.R:172:3): Properties of collapsed query ────────
191-
# head(q, 1) %>% collect() not equal to tibble::tibble(lgl = FALSE, total = 8L, extra = 40).
192-
# Component "total": Mean relative difference: 0.3846154
193-
# Component "extra": Mean relative difference: 0.3846154
194-
# ── Failure (test-dplyr-collapse.R:176:3): Properties of collapsed query ────────
195-
# tail(q, 1) %>% collect() not equal to tibble::tibble(lgl = NA, total = 25L, extra = 125).
196-
# Component "total": Mean relative difference: 0.9230769
197-
# Component "extra": Mean relative difference: 0.9230769
198188
expect_equal(
199189
q %>%
200190
arrange(lgl) %>%

0 commit comments

Comments
 (0)