base::match()
和 base::%in%
不是泛型,因此我们不能只为它们定义 Arrow 方法。这些函数在 Arrow C++ 库中公开了类似的函数。
值
match_arrow()
返回一个与 x
长度和类型相同的 int32
类型 Arrow 对象,其中包含 table
中的(基于 0 的)索引。is_in()
返回一个与 x
长度和类型相同的 boolean
类型 Arrow 对象,其中包含指示 x
的每个元素是否出现在 table
中的值。
示例
# note that the returned value is 0-indexed
cars_tbl <- arrow_table(name = rownames(mtcars), mtcars)
match_arrow(Scalar$create("Mazda RX4 Wag"), cars_tbl$name)
#> Scalar
#> 1
is_in(Array$create("Mazda RX4 Wag"), cars_tbl$name)
#> Array
#> <bool>
#> [
#> true
#> ]
# Although there are multiple matches, you are returned the index of the first
# match, as with the base R equivalent
match(4, mtcars$cyl) # 1-indexed
#> [1] 3
match_arrow(Scalar$create(4), cars_tbl$cyl) # 0-indexed
#> Scalar
#> 2
# If `x` contains multiple values, you are returned the indices of the first
# match for each value.
match(c(4, 6, 8), mtcars$cyl)
#> [1] 3 1 5
match_arrow(Array$create(c(4, 6, 8)), cars_tbl$cyl)
#> Array
#> <int32>
#> [
#> 2,
#> 0,
#> 4
#> ]
# Return type matches type of `x`
is_in(c(4, 6, 8), mtcars$cyl) # returns vector
#> Array
#> <bool>
#> [
#> true,
#> true,
#> true
#> ]
is_in(Scalar$create(4), mtcars$cyl) # returns Scalar
#> Scalar
#> true
is_in(Array$create(c(4, 6, 8)), cars_tbl$cyl) # returns Array
#> Array
#> <bool>
#> [
#> true,
#> true,
#> true
#> ]
is_in(ChunkedArray$create(c(4, 6), 8), cars_tbl$cyl) # returns ChunkedArray
#> ChunkedArray
#> <bool>
#> [
#> [
#> true,
#> true,
#> true
#> ]
#> ]