You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@arrow.apache.org by "Dewey Dunnington (Jira)" <ji...@apache.org> on 2022/04/21 13:35:00 UTC

[jira] [Created] (ARROW-16266) [R] Add StructArray$create()

Dewey Dunnington created ARROW-16266:
----------------------------------------

             Summary: [R] Add StructArray$create()
                 Key: ARROW-16266
                 URL: https://issues.apache.org/jira/browse/ARROW-16266
             Project: Apache Arrow
          Issue Type: Improvement
          Components: R
            Reporter: Dewey Dunnington


In ARROW-13371 we implemented the {{make_struct}} compute function bound to {{data.frame()}} / {{tibble()}} in dplyr evaluation; however, we didn't actually implement {{StructArray$create()}}. In ARROW-15168, it turns out that we need to do this to support {{StructArray}} creation from data.frames whose columns aren't all convertable using the internal C++ conversion. The hack used in that PR is below (but we should clearly implement the C++ function instead of using the hack):

{code:R}
library(arrow, warn.conflicts = FALSE)

struct_array <- function(...) {
  batch <- record_batch(...)
  array_ptr <- arrow:::allocate_arrow_array()
  schema_ptr <- arrow:::allocate_arrow_schema()
  batch$export_to_c(array_ptr, schema_ptr)
  Array$import_from_c(array_ptr, schema_ptr)
}

struct_array(a = 1, b = "two")
#> StructArray
#> <struct<a: double, b: string>>
#> -- is_valid: all not null
#> -- child 0 type: double
#>   [
#>     1
#>   ]
#> -- child 1 type: string
#>   [
#>     "two"
#>   ]
{code}




--
This message was sent by Atlassian Jira
(v8.20.7#820007)