ianmcook commented on a change in pull request #10269:
URL: https://github.com/apache/arrow/pull/10269#discussion_r629628488



##########
File path: r/R/record-batch.R
##########
@@ -161,6 +161,17 @@ RecordBatch$create <- function(..., schema = NULL) {
     out <- RecordBatch__from_arrays(schema, arrays)
     return(dplyr::group_by(out, !!!dplyr::groups(arrays[[1]])))
   }
+
+  # If any arrays are length 1, recycle them  
+  arr_lens <- map_int(arrays, length)
+  if (length(arrays) > 1 && any(arr_lens == 1) && !all(arr_lens==1)){
+    max_array_len <- max(arr_lens)
+    arrays <- modify2(
+      arrays,
+      arr_lens == 1,
+      ~if(.y) MakeArrayFromScalar(Scalar$create(as.vector(.x)), max_array_len) 
else .x

Review comment:
       We should find a way to do this without calling `as.vector()` because 
that will convert Arrow objects to R vectors which could cause the data type to 
be lost during the conversion.
   
   But the problem is that without `as.vector()`, length 1 `ChunkedArray` 
objects will error when passed to `Scalar$create()`. I think the cleanest way 
to solve that is to improve the `Array$create` function in `array.R` to handle 
`ChunkedArray` objects and convert it to `Array`. (This is getting into yak 
shaving territory here but I think it's important.)




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to