跳到内容

Array 是一个不可变的数据数组,具有某种逻辑类型和长度。大多数逻辑类型都包含在基本 Array 类中;还有一些子类,例如 DictionaryArrayListArrayStructArray

工厂

Array$create() 工厂方法实例化 Array 并接受以下参数

  • x: R 向量、列表或 data.frame

  • type: x 的可选 数据类型。如果省略,则类型将从数据推断得出。

Array$create() 将返回 Array 的适当子类,例如,当给定 R 因子时,将返回 DictionaryArray

要直接组成 DictionaryArray,请调用 DictionaryArray$create(),它接受两个参数

  • x: 用于字典索引的 R 向量或 Array 整数

  • dict: 字典值的 R 向量或 Array(如 R 因子级别,但不仅限于字符串)

用法

a <- Array$create(x)
length(a)

print(a)
a == a

方法

  • $IsNull(i): 如果索引处的值为 null,则返回 true。不进行边界检查

  • $IsValid(i): 如果索引处的值为有效,则返回 true。不进行边界检查

  • $length(): 此数组包含的元素数量

  • $nbytes(): 数组元素所占用的总字节数

  • $offset: 另一个数组数据的相对位置,用于启用零拷贝切片

  • $null_count: 数组中 null 条目的数量

  • $type: 数据的逻辑类型

  • $type_id(): 类型 ID

  • $Equals(other) : 此数组是否等于 other

  • $ApproxEquals(other) :

  • $Diff(other) : 返回一个字符串,表示两个数组之间的差异

  • $data(): 返回底层 ArrayData

  • $as_vector(): 转换为 R 向量

  • $ToString(): 数组的字符串表示形式

  • $Slice(offset, length = NULL): 使用指示的偏移量和长度构造数组的零拷贝切片。如果长度为 NULL,则切片将一直到数组的末尾。

  • $Take(i): 返回一个 Array,其中包含由整数 (R 向量或 Array 数组) i 给出的位置的值。

  • $Filter(i, keep_na = TRUE): 返回一个 Array,其中包含逻辑向量(或 Arrow 布尔值数组)iTRUE 的位置的值。

  • $SortIndices(descending = FALSE): 返回一个 Array,其中包含可以用于按升序或降序重新排列 Array 的整数位置

  • $RangeEquals(other, start_idx, end_idx, other_start_idx) :

  • $cast(target_type, safe = TRUE, options = cast_options(safe)): 更改数组中的数据以更改其类型。

  • $View(type): 使用给定类型构造此数组的零拷贝视图。

  • $Validate() : 执行任何验证检查,以确定数组内部数据中明显的矛盾。这可能是一个昂贵的检查,可能为 O(length)

示例

my_array <- Array$create(1:10)
my_array$type
#> Int32
#> int32
my_array$cast(int8())
#> Array
#> <int8>
#> [
#>   1,
#>   2,
#>   3,
#>   4,
#>   5,
#>   6,
#>   7,
#>   8,
#>   9,
#>   10
#> ]

# Check if value is null; zero-indexed
na_array <- Array$create(c(1:5, NA))
na_array$IsNull(0)
#> [1] FALSE
na_array$IsNull(5)
#> [1] TRUE
na_array$IsValid(5)
#> [1] FALSE
na_array$null_count
#> [1] 1

# zero-copy slicing; the offset of the new Array will be the same as the index passed to $Slice
new_array <- na_array$Slice(5)
new_array$offset
#> [1] 5

# Compare 2 arrays
na_array2 <- na_array
na_array2 == na_array # element-wise comparison
#> Array
#> <bool>
#> [
#>   true,
#>   true,
#>   true,
#>   true,
#>   true,
#>   null
#> ]
na_array2$Equals(na_array) # overall comparison
#> [1] TRUE