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