跳至内容

最常见的 R 向量类型会自动转换为合适的 Arrow 数据类型,无需扩展类型。对于默认情况下转换处理不当的向量类型,您可以创建一个 vctrs_extension_array(),它将 vctrs::vec_data() 传递给 Array$create(),并在 Array 转换回 R 向量时调用 vctrs::vec_restore()

用法

vctrs_extension_array(x, ptype = vctrs::vec_ptype(x), storage_type = NULL)

vctrs_extension_type(x, storage_type = infer_type(vctrs::vec_data(x)))

参数

x

一个 vctr(即,vctrs::vec_is() 返回 TRUE)。

ptype

一个 vctrs::vec_ptype(),通常是具有适当属性设置的对象的零长度版本。此值将使用 serialize() 进行序列化,因此它不应引用任何无法保存/重新加载的 R 对象。

storage_type

底层存储数组的 数据类型

返回值

  • vctrs_extension_array() 返回一个具有 vctrs_extension_type()ExtensionArray 实例。

  • vctrs_extension_type() 返回扩展名称为“arrow.r.vctrs”的 ExtensionType 实例。

示例

(array <- vctrs_extension_array(as.POSIXlt("2022-01-02 03:45", tz = "UTC")))
#> ExtensionArray
#> <POSIXlt of length 0>
#> -- is_valid: all not null
#> -- child 0 type: double
#>   [
#>     0
#>   ]
#> -- child 1 type: int32
#>   [
#>     45
#>   ]
#> -- child 2 type: int32
#>   [
#>     3
#>   ]
#> -- child 3 type: int32
#>   [
#>     2
#>   ]
#> -- child 4 type: int32
#>   [
#>     0
#>   ]
#> -- child 5 type: int32
#>   [
#>     122
#>   ]
#> -- child 6 type: int32
#>   [
#>     0
#>   ]
#> -- child 7 type: int32
#>   [
#>     1
#>   ]
#> -- child 8 type: int32
#>   [
#>     0
#>   ]
#> -- child 9 type: string
#>   [
#>     "UTC"
#>   ]
#> -- child 10 type: int32
#>   [
#>     0
#>   ]
array$type
#> VctrsExtensionType
#> POSIXlt of length 0
as.vector(array)
#> [1] "2022-01-02 03:45:00 UTC"

temp_feather <- tempfile()
write_feather(arrow_table(col = array), temp_feather)
read_feather(temp_feather)
#> # A tibble: 1 x 1
#>   col                
#>   <dttm>             
#> 1 2022-01-02 03:45:00
unlink(temp_feather)