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 `Array$create()` inside `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:
us...@infra.apache.org


Reply via email to