将array
转换为to
指定的数据类型。这是一个低级接口;大多数用户应该使用as.data.frame()
或as.vector()
,除非需要对转换进行更细粒度的控制。此函数是一个 S3 通用函数,根据to
进行调度:开发者可以为自定义向量类型实现自己的 S3 方法。
参数
- array
- to
一个目标原型对象,描述了应将
array
转换为的类型,或NULL
以使用infer_nanoarrow_ptype()
返回的默认转换。或者,可以传递一个函数来执行根据array
和原型的默认推断计算默认 ptype 的备用计算。- ...
传递给 S3 方法
细节
注意,未注册的扩展类型默认情况下会发出警告。使用options(nanoarrow.warn_unregistered_extension = FALSE)
禁用此行为。
以下 R 向量类型实现了转换
logical()
:除了布尔类型外,任何数值类型都可以转换为logical()
。对于数值类型,任何非零值都被认为是TRUE
。integer()
:任何数值类型都可以转换为integer()
;但是,如果任何值超出 32 位整数的范围,则会发出警告。double()
:任何数值类型都可以转换为double()
。此转换目前不会对可能无法通过浮点双精度数进行往返的数值(例如,非常大的 uint64 和 int64 值)发出警告。character()
:字符串和大型字符串类型可以转换为character()
。转换不会检查有效的 UTF-8:如果您需要对编码进行更细粒度的控制,请使用to = blob::blob()
。factor()
:字符串的字典编码数组可以转换为factor()
;但是,这必须明确指定(即,convert_array(array, factor())
),因为分块到达的数组可以包含包含不同级别的字典。使用convert_array(array, factor(levels = c(...)))
将数组具体化为具有已知级别的向量。Date: 只有 date32 类型可以转换为 R Date 向量。
hms::hms()
:Time32 和 time64 类型可以转换为hms::hms()
。difftime()
:Time32、time64 和 duration 类型可以转换为 Rdifftime()
向量。值将转换为与to
的units()
属性匹配。blob::blob()
:字符串、大型字符串、二进制和大型二进制类型可以转换为blob::blob()
。vctrs::list_of()
:列表、大型列表和固定大小列表类型可以转换为vctrs::list_of()
。data.frame()
:结构类型可以转换为data.frame()
。vctrs::unspecified()
:任何类型都可以转换为vctrs::unspecified()
;但是,如果遇到任何非空值,则会发出警告。
除了上述转换之外,空数组还可以转换为除data.frame()
之外的任何目标原型。扩展数组目前按其存储类型进行转换。
示例
array <- as_nanoarrow_array(data.frame(x = 1:5))
str(convert_array(array))
#> 'data.frame': 5 obs. of 1 variable:
#> $ x: int 1 2 3 4 5
str(convert_array(array, to = data.frame(x = double())))
#> 'data.frame': 5 obs. of 1 variable:
#> $ x: num 1 2 3 4 5