跳过内容

array 转换为 to 指定的类型。这是一个低级接口;除非需要更精细的转换控制,否则大多数用户应使用 as.data.frame()as.vector()。此函数是一个基于 to 进行 S3 泛型分派的函数:开发者可以为其自定义向量类型实现自己的 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()

  • matrix():固定大小列表类型可以转换为 matrix(ptype, ncol = fixed_size)

  • 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