跳至内容

此实验性 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

subclass

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

返回值

一个类为 'nanoarrow_vctr' 的 vctr

细节

nanoarrow_vctr 的当前实现类似于 factor():它的存储类型是一个 integer(),它是沿着 vctr 的总长度的一个序列,并且有一些属性是必需的,以便将这些索引解析为数组 + 偏移量。在最近版本的 R 中,序列通常具有非常紧凑的表示形式,因此即使对于大型数组,这也有一个廉价的存储空间。属性目前是

  • schema: 每个块共享的 nanoarrow_schema

  • chunks: 一个 list()nanoarrow_array

  • 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