Uploaded image for project: 'Apache Arrow'
  1. Apache Arrow
  2. ARROW-14297

[R] smooth out integer division to better match R

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 7.0.0
    • R

    Description

      Behaviour of integer division from Arrow differs from R. 

      > a <- c(1:4, NA_integer_)
      > a_arrow <- Array$create(a)
      > 
      > expect_identical(as.vector(a_arrow %/% 2), a %/% 2)
      Error: as.vector(a_arrow%/%2) (`actual`) not identical to a%/%2 (`expected`).
      
      `actual` is an integer vector (0, 1, 1, 2, NA)
      `expected` is a double vector (0, 1, 1, 2, NA)
      > 
      > # this actually works, but on accident as in R the type of the denominator
      > # is the one that determines the type of the output 
      > expect_identical(as.vector(a_arrow %/% 2L), a %/% 2L)
      > 
      > expect_identical(as.vector(a_arrow %/% 0), a %/% 0)
      Error: as.vector(a_arrow%/%0) (`actual`) not identical to a%/%0 (`expected`).
      
      `actual` is an integer vector (2147483647, 2147483647, 2147483647, 2147483647, NA)
      `expected` is a double vector (Inf, Inf, Inf, Inf, NA)
      > expect_identical(as.vector(a_arrow %/% 0L), a %/% 0L)
      Error: as.vector(a_arrow%/%0L) (`actual`) not identical to a%/%0L (`expected`).
      
        `actual`: 2147483647 2147483647 2147483647 2147483647 NA
      `expected`:         NA         NA         NA         NA NA
      > 
      > b <- -a
      > b_arrow <- Array$create(b)
      > expect_identical(as.vector(b_arrow %/% 2), b %/% 2)
      Error: as.vector(b_arrow%/%2) (`actual`) not identical to b%/%2 (`expected`).
      
      `actual` is an integer vector (0, -1, -1, -2, NA)
      `expected` is a double vector (-1, -1, -2, -2, NA)
      > expect_identical(as.vector(b_arrow %/% .2), b %/% .2)
      Error: as.vector(b_arrow%/%0.2) (`actual`) not identical to b%/%0.2 (`expected`).
      
      `actual` is an integer vector (-5, -10, -15, -20, NA)
      `expected` is a double vector (-5, -10, -15, -20, NA)
      

      expect_dplyr_equal() uses expect_equal() which does not enforce type.

      This is a follow-up issue to ARROW-13800 

      Attachments

        Issue Links

          Activity

            People

              paleolimbot Dewey Dunnington
              dragosmg Dragoș Moldovan-Grünfeld
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 2h 50m
                  2h 50m