diff --git a/R/as-data-frame.R b/R/as-data-frame.R index 8655e5595..37cc60c70 100644 --- a/R/as-data-frame.R +++ b/R/as-data-frame.R @@ -196,7 +196,7 @@ csvToDataFrame <- function(csv_df, cp <- columnParser("categorical") } subvar_info <- parsing_info[!is.na(parsing_info$parent_alias) & parsing_info$parent_alias == alias(v), ] - cols <- csv_df[, subvar_info$qualified_alias] + cols <- csv_df[, subvar_info$qualified_alias, drop = FALSE] if (array_strategy == "alias"){ return(structure(lapply(cols, cp, v, categorical.mode), .Names = subvar_info$cond_qualified_alias)) } else if (array_strategy == "qualified_alias") { diff --git a/tests/testthat/test-as-data-frame.R b/tests/testthat/test-as-data-frame.R index 56b78c5b3..b9019744b 100644 --- a/tests/testthat/test-as-data-frame.R +++ b/tests/testthat/test-as-data-frame.R @@ -222,6 +222,16 @@ with_mock_crunch({ expect_equivalent(df_packed, expected_packed_df) }) + test_that("csvToDataFrame handles 1 column subvariables", { + csv_df <- structure(list(`x[x1]` = 1:3, `x[x2_derived]` = 1:3, `y[y1]` = 1:3), class = "data.frame", row.names = c(NA, -3L)) + expected <- data.frame(`x[x1]` = 1:3, `x2_derived` = 1:3, `y[y1]` = factor(letters[1:3], levels = letters[1:5]), check.names = FALSE) + col_info <- csvColInfo(ds_dup) + + df_actual <- csvToDataFrame(csv_df, ds_dup, col_info[6:8, ])[c("x[x1]", "x2_derived", "y[y1]")] + + expect_equal(df_actual, expected) + }) + test_that("as.data.frame when a variable has an apostrophe in its alias", { t2 <- forceVariableCatalog(ds)