diff --git a/r/R/dataset-write.R b/r/R/dataset-write.R index dd675b40d09..900140de928 100644 --- a/r/R/dataset-write.R +++ b/r/R/dataset-write.R @@ -146,6 +146,9 @@ write_dataset <- function( if (format %in% c("feather", "ipc")) { format <- "arrow" } + if (format == "text") { + format <- "csv" + } if (inherits(dataset, "arrow_dplyr_query")) { # partitioning vars need to be in the `select` schema dataset <- ensure_group_vars(dataset) @@ -189,7 +192,7 @@ write_dataset <- function( path_and_fs <- get_path_and_filesystem(path) dots <- list(...) - if (format %in% c("txt", "text") && !any(c("delimiter", "delim") %in% names(dots))) { + if (format == "txt" && !any(c("delimiter", "delim") %in% names(dots))) { stop("A delimiter must be given for a txt format.") } if (format == "tsv" && any(c("delimiter", "delim") %in% names(dots))) { diff --git a/r/tests/testthat/test-dataset-write.R b/r/tests/testthat/test-dataset-write.R index 8fed358dc37..23d870830f3 100644 --- a/r/tests/testthat/test-dataset-write.R +++ b/r/tests/testthat/test-dataset-write.R @@ -913,11 +913,6 @@ test_that("Writing a flat file dataset without a delimiter throws an error.", { write_dataset(df, dst_dir, format = "txt"), "A delimiter must be given for a txt format." ) - - expect_error( - write_dataset(df, dst_dir, format = "text"), - "A delimiter must be given for a txt format." - ) }) test_that("Dataset can write flat files using readr::write_csv() options.", { @@ -1048,3 +1043,23 @@ test_that("Row order is preserved when writing large parquet dataset", { # But ordered is exactly equal. expect_equal(ordered_ds$x, df$x) }) + +test_that("write_dataset maps format 'text' to 'csv' (GH-38217)", { + df <- tibble( + int = 1:10, + dbl = as.numeric(1:10), + chr = letters[1:10], + ) + + dst_dir <- make_temp_dir() + write_dataset(df, dst_dir, format = "text") + expect_true(dir.exists(dst_dir)) + + # Files should have .csv extension, not .text + written_files <- list.files(dst_dir) + expect_match(written_files, "\\.csv$") + + # Data should round-trip correctly + result <- open_dataset(dst_dir, format = "csv") |> collect() + expect_equal(result, df) +})