Skip to content

[C++][R] Can't cast integer difftime to duration (but works with double) #31295

@asfimport

Description

@asfimport

It's possible to cast doubles to durations, but not integers. This has been found in the R code via the issues below:

The shortest reprex I can make is as follows:

# Successfully cast a double to a duration
vec_to_Array(as.difftime(32, units = "secs"), NULL)$cast(duration())
#> Array
#> <duration[s]>
#> [
#>   32
#> ]

# Fail to do so with an integer
vec_to_Array(as.difftime(32L, units = "secs"), NULL)$cast(duration())
#> Error: NotImplemented: Unsupported cast from int32 to duration using function cast_duration

I would expect both a and b to create a duration object of 32 seconds, but the second one returns an int32

library(arrow, warn.conflicts = FALSE)

a <- as.difftime(32, units = "secs") # i.e. a double
b <- as.difftime(32L, units = "secs") # i.e. an integer

Array$create(a)
#> Array
#> <duration[s]>
#> [
#>   32
#> ]
Array$create(b)
#> Array
#> <int32>
#> [
#>   32
#> ]

If I try to be explicit, I get somewhat of a clue why that might be happening:

 
Array$create(a, type = duration())
#> Array
#> <duration[s]>
#> [
#>   32
#> ]
Array$create(b, type = duration())
#> Error:
#> ! NotImplemented: Extend

Nevertheless, the fallback to creating an integer was unexpected.

Reporter: Dragoș Moldovan-Grünfeld / @dragosmg

Related issues:

Note: This issue was originally created as ARROW-15858. Please see the migration documentation for further details.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions