此实验性 vctr 类允许零个或多个 Arrow 数组以 R 向量形式呈现,无需进行转换。对于没有无损 R 等价类型的数组,这很有用,并有助于提供一个中间对象类型,其中默认转换成本过高(例如,数据帧的嵌套列表)。这些对象在许多 vctr 转换中无法保存;但是,它们可以在不复制底层数组的情况下进行切片。
参数
- x
一个可与
as_nanoarrow_array_stream()
一起使用的对象。- ...
- schema
一个可选的
schema
- subclass
一个可选的 nanoarrow_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