diff --git a/r/src/arrow_cpp11.h b/r/src/arrow_cpp11.h index f1338c02ca6..123875325c6 100644 --- a/r/src/arrow_cpp11.h +++ b/r/src/arrow_cpp11.h @@ -407,6 +407,12 @@ cpp11::writable::list to_r_list(const std::vector>& x) { } // namespace r } // namespace arrow +struct r_vec_size { + explicit r_vec_size(R_xlen_t x) : value(x) {} + + R_xlen_t value; +}; + namespace cpp11 { template @@ -428,4 +434,13 @@ SEXP as_sexp(const std::shared_ptr& ptr) { return cpp11::to_r6(ptr); } +inline SEXP as_sexp(r_vec_size size) { + R_xlen_t x = size.value; + if (x > std::numeric_limits::max()) { + return Rf_ScalarReal(x); + } else { + return Rf_ScalarInteger(x); + } +} + } // namespace cpp11 diff --git a/r/src/recordbatch.cpp b/r/src/recordbatch.cpp index 558628a9ccb..01bd8a3f35b 100644 --- a/r/src/recordbatch.cpp +++ b/r/src/recordbatch.cpp @@ -32,8 +32,8 @@ int RecordBatch__num_columns(const std::shared_ptr& x) { } // [[arrow::export]] -int RecordBatch__num_rows(const std::shared_ptr& x) { - return x->num_rows(); +r_vec_size RecordBatch__num_rows(const std::shared_ptr& x) { + return r_vec_size(x->num_rows()); } // [[arrow::export]] diff --git a/r/src/table.cpp b/r/src/table.cpp index 051647979f5..07bf44750a1 100644 --- a/r/src/table.cpp +++ b/r/src/table.cpp @@ -28,7 +28,9 @@ int Table__num_columns(const std::shared_ptr& x) { } // [[arrow::export]] -int Table__num_rows(const std::shared_ptr& x) { return x->num_rows(); } +r_vec_size Table__num_rows(const std::shared_ptr& x) { + return r_vec_size(x->num_rows()); +} // [[arrow::export]] std::shared_ptr Table__schema(const std::shared_ptr& x) {