跳过内容

这个实验性的 vctr 类允许一个或多个 Arrow 数组作为 R 向量呈现,而无需转换它们。这对于没有无损 R 等效类型的数组很有用,并有助于提供一个中间对象类型,当默认转换成本过高时(例如,数据帧的嵌套列表)。这些对象不会在许多 vctr 转换中幸存下来;但是,它们可以在不复制底层数组的情况下进行切片。

用法

as_nanoarrow_vctr(x, ..., schema = NULL, subclass = character())

nanoarrow_vctr(schema = NULL, subclass = character())

参数

x

as_nanoarrow_array_stream() 一起使用的对象。

...

传递给 as_nanoarrow_array_stream()

schema

可选的 schema

子类

一个可选的 nanoarrow_vctr 子类,用于添加到最终类名之前。

返回值

类为 'nanoarrow_vctr' 的 vctr

详情

nanoarrow_vctr 目前的实现方式类似于 factor():它的存储类型是一个 integer(),它是 vctr 总长度上的一个序列,并且有一些属性需要将这些索引解析为数组 + 偏移量。在 R 的最新版本中,序列通常具有非常紧凑的表示形式,因此即使对于大型数组,它的存储占用也很小。这些属性目前是

  • schema:每个块共享的 nanoarrow_schema

  • chunks:一个 nanoarrow_arraylist()

  • offsets:一个 integer() 向量,以 0 开头,后跟每个块的累积长度。这允许以 log(n) 的复杂度从逻辑索引解析块索引 + 偏移量。

此实现是初步的,可能会更改;但是,as_nanoarrow_array_stream(some_vctr[begin:end]) 的结果应该保持稳定。

示例

array <- as_nanoarrow_array(1:5)
as_nanoarrow_vctr(array)
#> <nanoarrow_vctr int32[5]>
#> [1] 1 2 3 4 5