跳到内容

array转换为to指定的数据类型。这是一个低级接口;大多数用户应该使用as.data.frame()as.vector(),除非需要对转换进行更细粒度的控制。此函数是一个 S3 通用函数,根据to进行调度:开发者可以为自定义向量类型实现自己的 S3 方法。

用法

convert_array(array, to = NULL, ...)

参数

array

一个nanoarrow_array.

to

一个目标原型对象,描述了应将array转换为的类型,或NULL以使用infer_nanoarrow_ptype()返回的默认转换。或者,可以传递一个函数来执行根据array和原型的默认推断计算默认 ptype 的备用计算。

...

传递给 S3 方法

返回值

一个类型为to的 R 向量。

细节

注意,未注册的扩展类型默认情况下会发出警告。使用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 类型可以转换为 R difftime() 向量。值将转换为与tounits()属性匹配。

  • 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