2018-06-26 05:48:55 +02:00
|
|
|
# Set up the path and data -------------------------------------------------
|
|
|
|
metadata <- read.csv(
|
2020-06-03 06:40:50 +02:00
|
|
|
get_data_location("ExampleProject_DataDictionary_2018-06-07.csv"),
|
|
|
|
stringsAsFactors = TRUE
|
2018-06-26 05:48:55 +02:00
|
|
|
)
|
|
|
|
|
2023-04-13 10:57:04 +02:00
|
|
|
records <-
|
|
|
|
read.csv(get_data_location("ExampleProject_DATA_2018-06-07_1129.csv"),
|
2024-02-27 13:20:21 +01:00
|
|
|
stringsAsFactors = TRUE
|
|
|
|
)
|
2018-06-26 05:48:55 +02:00
|
|
|
|
2019-07-29 18:30:52 +02:00
|
|
|
redcap_output_csv1 <- REDCap_split(records, metadata)
|
|
|
|
|
2018-06-26 05:48:55 +02:00
|
|
|
# Test that basic CSV export matches reference ------------------------------
|
|
|
|
test_that("CSV export matches reference", {
|
2024-09-05 15:38:38 +02:00
|
|
|
# expect_known_hash(redcap_output_csv1, "cb5074a06e1abcf659d60be1016965d2")
|
|
|
|
# dput(redcap_output_csv1)
|
|
|
|
expect_identical(
|
|
|
|
redcap_output_csv1,
|
|
|
|
list(
|
|
|
|
structure(list(
|
|
|
|
row = structure(1:32, levels = c(
|
|
|
|
"AMC Javelin",
|
|
|
|
"Cadillac Fleetwood", "Camaro Z28", "Chrysler Imperial", "Datsun 710",
|
|
|
|
"Dodge Challenger", "Duster 360", "Ferrari Dino", "Fiat 128",
|
|
|
|
"Fiat X1-9", "Ford Pantera L", "Honda Civic", "Hornet 4 Drive",
|
|
|
|
"Hornet Sportabout", "Lincoln Continental", "Lotus Europa", "Maserati Bora",
|
|
|
|
"Mazda RX4", "Mazda RX4 Wag", "Merc 230", "Merc 240D", "Merc 280",
|
|
|
|
"Merc 280C", "Merc 450SE", "Merc 450SL", "Merc 450SLC", "Pontiac Firebird",
|
|
|
|
"Porsche 914-2", "Toyota Corolla", "Toyota Corona", "Valiant",
|
|
|
|
"Volvo 142E"
|
|
|
|
), class = "factor"), mpg = c(
|
|
|
|
15.2, 10.4, 13.3, 14.7,
|
|
|
|
22.8, 15.5, 14.3, 19.7, 32.4, 27.3, 15.8, 30.4, 21.4, 18.7, 10.4,
|
|
|
|
30.4, 15, 21, 21, 22.8, 24.4, 19.2, 17.8, 16.4, 17.3, 15.2, 19.2,
|
|
|
|
26, 33.9, 21.5, 18.1, 21.4
|
|
|
|
), cyl = c(
|
|
|
|
8L, 8L, 8L, 8L, 4L, 8L,
|
|
|
|
8L, 6L, 4L, 4L, 8L, 4L, 6L, 8L, 8L, 4L, 8L, 6L, 6L, 4L, 4L, 6L,
|
|
|
|
6L, 8L, 8L, 8L, 8L, 4L, 4L, 4L, 6L, 4L
|
|
|
|
), disp = c(
|
|
|
|
304, 472, 350,
|
|
|
|
440, 108, 318, 360, 145, 78.7, 79, 351, 75.7, 258, 360, 460,
|
|
|
|
95.1, 301, 160, 160, 140.8, 146.7, 167.6, 167.6, 275.8, 275.8,
|
|
|
|
275.8, 400, 120.3, 71.1, 120.1, 225, 121
|
|
|
|
), hp = c(
|
|
|
|
150L, 205L,
|
|
|
|
245L, 230L, 93L, 150L, 245L, 175L, 66L, 66L, 264L, 52L, 110L,
|
|
|
|
175L, 215L, 113L, 335L, 110L, 110L, 95L, 62L, 123L, 123L, 180L,
|
|
|
|
180L, 180L, 175L, 91L, 65L, 97L, 105L, 109L
|
|
|
|
), drat = c(
|
|
|
|
3.15,
|
|
|
|
2.93, 3.73, 3.23, 3.85, 2.76, 3.21, 3.62, 4.08, 4.08, 4.22, 4.93,
|
|
|
|
3.08, 3.15, 3, 3.77, 3.54, 3.9, 3.9, 3.92, 3.69, 3.92, 3.92,
|
|
|
|
3.07, 3.07, 3.07, 3.08, 4.43, 4.22, 3.7, 2.76, 4.11
|
|
|
|
), wt = c(
|
|
|
|
3.435,
|
|
|
|
5.25, 3.84, 5.345, 2.32, 3.52, 3.57, 2.77, 2.2, 1.935, 3.17,
|
|
|
|
1.615, 3.215, 3.44, 5.424, 1.513, 3.57, 2.62, 2.875, 3.15, 3.19,
|
|
|
|
3.44, 3.44, 4.07, 3.73, 3.78, 3.845, 2.14, 1.835, 2.465, 3.46,
|
|
|
|
2.78
|
|
|
|
), qsec = c(
|
|
|
|
17.3, 17.98, 15.41, 17.42, 18.61, 16.87, 15.84,
|
|
|
|
15.5, 19.47, 18.9, 14.5, 18.52, 19.44, 17.02, 17.82, 16.9, 14.6,
|
|
|
|
16.46, 17.02, 22.9, 20, 18.3, 18.9, 17.4, 17.6, 18, 17.05, 16.7,
|
|
|
|
19.9, 20.01, 20.22, 18.6
|
|
|
|
), vs = c(
|
|
|
|
0L, 0L, 0L, 0L, 1L, 0L, 0L,
|
|
|
|
0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L
|
|
|
|
), am = c(
|
|
|
|
0L, 0L, 0L, 0L, 1L,
|
|
|
|
0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L
|
|
|
|
), gear = c(
|
|
|
|
3L, 3L,
|
|
|
|
3L, 3L, 4L, 3L, 3L, 5L, 4L, 4L, 5L, 4L, 3L, 3L, 3L, 5L, 5L, 4L,
|
|
|
|
4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L, 5L, 4L, 3L, 3L, 4L
|
|
|
|
), carb = c(
|
|
|
|
2L,
|
|
|
|
4L, 4L, 4L, 1L, 2L, 4L, 6L, 1L, 1L, 4L, 2L, 1L, 2L, 4L, 2L, 8L,
|
|
|
|
4L, 4L, 2L, 2L, 4L, 4L, 3L, 3L, 3L, 2L, 2L, 1L, 1L, 1L, 2L
|
|
|
|
),
|
|
|
|
color_available___red = c(
|
|
|
|
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), color_available___green = c(
|
|
|
|
1L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L
|
|
|
|
), color_available___blue = c(
|
|
|
|
1L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), color_available___black = c(
|
|
|
|
0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L
|
|
|
|
), motor_trend_cars_complete = c(
|
|
|
|
1L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), letter_group___a = c(
|
|
|
|
1L,
|
|
|
|
0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L
|
|
|
|
), letter_group___b = c(
|
|
|
|
1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), letter_group___c = c(
|
|
|
|
0L,
|
|
|
|
0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L
|
|
|
|
), choice = structure(c(
|
|
|
|
3L, 1L, 2L, 2L, 1L, 1L, 2L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
|
|
|
|
), levels = c(
|
|
|
|
"", "choice1",
|
|
|
|
"choice2"
|
|
|
|
), class = "factor"), grouping_complete = c(
|
|
|
|
2L,
|
|
|
|
0L, 2L, 2L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L
|
|
|
|
)
|
|
|
|
), row.names = c(
|
|
|
|
1L, 5L, 6L, 9L, 11L, 12L, 13L, 18L, 19L,
|
|
|
|
20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 34L, 35L,
|
|
|
|
36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L
|
|
|
|
), class = "data.frame"),
|
|
|
|
sale = structure(list(
|
|
|
|
row = structure(c(
|
|
|
|
1L, 1L, 1L, 3L, 3L,
|
|
|
|
4L, 7L, 7L, 7L, 7L, 20L, 20L, 20L
|
|
|
|
), levels = c(
|
|
|
|
"AMC Javelin",
|
|
|
|
"Cadillac Fleetwood", "Camaro Z28", "Chrysler Imperial",
|
|
|
|
"Datsun 710", "Dodge Challenger", "Duster 360", "Ferrari Dino",
|
|
|
|
"Fiat 128", "Fiat X1-9", "Ford Pantera L", "Honda Civic",
|
|
|
|
"Hornet 4 Drive", "Hornet Sportabout", "Lincoln Continental",
|
|
|
|
"Lotus Europa", "Maserati Bora", "Mazda RX4", "Mazda RX4 Wag",
|
|
|
|
"Merc 230", "Merc 240D", "Merc 280", "Merc 280C", "Merc 450SE",
|
|
|
|
"Merc 450SL", "Merc 450SLC", "Pontiac Firebird", "Porsche 914-2",
|
|
|
|
"Toyota Corolla", "Toyota Corona", "Valiant", "Volvo 142E"
|
|
|
|
), class = "factor"), redcap_repeat_instrument = c(
|
|
|
|
"sale",
|
|
|
|
"sale", "sale", "sale", "sale", "sale", "sale", "sale", "sale",
|
|
|
|
"sale", "sale", "sale", "sale"
|
|
|
|
), redcap_repeat_instance = c(
|
|
|
|
1L,
|
|
|
|
2L, 3L, 1L, 2L, 1L, 1L, 2L, 3L, 4L, 1L, 2L, 3L
|
|
|
|
), price = c(
|
|
|
|
12000.5,
|
|
|
|
13750.77, 15004.57, 7800, 8000, 7500, 8756.4, 6800.88, 8888.88,
|
|
|
|
970, 7800.98, 7954, 6800.55
|
|
|
|
), color = c(
|
|
|
|
1L, 3L, 2L, 2L, 3L,
|
|
|
|
1L, 4L, 2L, 1L, 4L, 2L, 1L, 3L
|
|
|
|
), customer = structure(c(
|
|
|
|
2L,
|
|
|
|
12L, 7L, 4L, 14L, 5L, 10L, 8L, 3L, 6L, 13L, 9L, 11L
|
|
|
|
), levels = c(
|
|
|
|
"",
|
|
|
|
"Bob", "Erica", "Janice", "Jim", "Juan", "Kim", "Pablo",
|
|
|
|
"Quentin", "Sarah", "Sharon", "Sue", "Ted", "Tim"
|
|
|
|
), class = "factor"),
|
|
|
|
sale_complete = c(
|
|
|
|
0L, 2L, 0L, 2L, 0L, 2L, 1L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 2L
|
|
|
|
)
|
|
|
|
), row.names = c(
|
|
|
|
2L, 3L, 4L, 7L, 8L, 10L,
|
|
|
|
14L, 15L, 16L, 17L, 31L, 32L, 33L
|
|
|
|
), class = "data.frame")
|
|
|
|
)
|
|
|
|
)
|
2018-06-26 05:48:55 +02:00
|
|
|
})
|
|
|
|
|
2023-03-07 15:38:28 +01:00
|
|
|
# Test that REDCap_split can handle a focused dataset
|
|
|
|
|
2024-02-27 13:20:21 +01:00
|
|
|
records_red <- records[
|
|
|
|
!records$redcap_repeat_instrument == "sale",
|
|
|
|
!names(records) %in%
|
|
|
|
metadata$field_name[metadata$form_name == "sale"] &
|
|
|
|
!names(records) == "sale_complete"
|
|
|
|
]
|
2023-04-13 10:57:04 +02:00
|
|
|
records_red$redcap_repeat_instrument <-
|
|
|
|
as.character(records_red$redcap_repeat_instrument)
|
2023-03-07 15:38:28 +01:00
|
|
|
|
|
|
|
redcap_output_red <- REDCap_split(records_red, metadata)
|
|
|
|
|
|
|
|
|
2024-02-27 13:20:21 +01:00
|
|
|
test_that("REDCap_split handles subset dataset", {
|
|
|
|
testthat::expect_length(redcap_output_red, 1)
|
|
|
|
})
|
2023-03-07 15:38:28 +01:00
|
|
|
|
|
|
|
|
2018-06-26 05:48:55 +02:00
|
|
|
# Test that R code enhanced CSV export matches reference --------------------
|
2018-06-28 23:20:14 +02:00
|
|
|
if (requireNamespace("Hmisc", quietly = TRUE)) {
|
|
|
|
test_that("R code enhanced export matches reference", {
|
2023-01-16 09:49:17 +01:00
|
|
|
redcap_output_csv2 <-
|
|
|
|
REDCap_split(REDCap_process_csv(records), metadata)
|
2018-06-26 05:48:55 +02:00
|
|
|
|
2024-09-05 15:38:38 +02:00
|
|
|
# expect_known_hash(redcap_output_csv2, "578dc054e59ec92a21e950042e08ee37")
|
|
|
|
# dput(redcap_output_csv2)
|
|
|
|
expect_identical(
|
|
|
|
redcap_output_csv2,
|
|
|
|
list(structure(list(
|
|
|
|
row = structure(1:32, levels = c(
|
|
|
|
"AMC Javelin",
|
|
|
|
"Cadillac Fleetwood", "Camaro Z28", "Chrysler Imperial", "Datsun 710",
|
|
|
|
"Dodge Challenger", "Duster 360", "Ferrari Dino", "Fiat 128",
|
|
|
|
"Fiat X1-9", "Ford Pantera L", "Honda Civic", "Hornet 4 Drive",
|
|
|
|
"Hornet Sportabout", "Lincoln Continental", "Lotus Europa", "Maserati Bora",
|
|
|
|
"Mazda RX4", "Mazda RX4 Wag", "Merc 230", "Merc 240D", "Merc 280",
|
|
|
|
"Merc 280C", "Merc 450SE", "Merc 450SL", "Merc 450SLC", "Pontiac Firebird",
|
|
|
|
"Porsche 914-2", "Toyota Corolla", "Toyota Corona", "Valiant",
|
|
|
|
"Volvo 142E"
|
|
|
|
), class = c("labelled", "factor"), label = "Name"),
|
|
|
|
mpg = structure(c(
|
|
|
|
15.2, 10.4, 13.3, 14.7, 22.8, 15.5, 14.3,
|
|
|
|
19.7, 32.4, 27.3, 15.8, 30.4, 21.4, 18.7, 10.4, 30.4, 15,
|
|
|
|
21, 21, 22.8, 24.4, 19.2, 17.8, 16.4, 17.3, 15.2, 19.2, 26,
|
|
|
|
33.9, 21.5, 18.1, 21.4
|
|
|
|
), label = "Miles/(US) gallon", class = c(
|
|
|
|
"labelled",
|
|
|
|
"numeric"
|
|
|
|
)), cyl = structure(c(
|
|
|
|
8L, 8L, 8L, 8L, 4L, 8L, 8L,
|
|
|
|
6L, 4L, 4L, 8L, 4L, 6L, 8L, 8L, 4L, 8L, 6L, 6L, 4L, 4L, 6L,
|
|
|
|
6L, 8L, 8L, 8L, 8L, 4L, 4L, 4L, 6L, 4L
|
|
|
|
), label = "Number of cylinders", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), disp = structure(c(
|
|
|
|
304, 472, 350, 440, 108,
|
|
|
|
318, 360, 145, 78.7, 79, 351, 75.7, 258, 360, 460, 95.1,
|
|
|
|
301, 160, 160, 140.8, 146.7, 167.6, 167.6, 275.8, 275.8,
|
|
|
|
275.8, 400, 120.3, 71.1, 120.1, 225, 121
|
|
|
|
), label = "Displacement", class = c(
|
|
|
|
"labelled",
|
|
|
|
"numeric"
|
|
|
|
)), hp = structure(c(
|
|
|
|
150L, 205L, 245L, 230L, 93L,
|
|
|
|
150L, 245L, 175L, 66L, 66L, 264L, 52L, 110L, 175L, 215L,
|
|
|
|
113L, 335L, 110L, 110L, 95L, 62L, 123L, 123L, 180L, 180L,
|
|
|
|
180L, 175L, 91L, 65L, 97L, 105L, 109L
|
|
|
|
), label = "Gross horsepower", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), drat = structure(c(
|
|
|
|
3.15, 2.93, 3.73, 3.23, 3.85,
|
|
|
|
2.76, 3.21, 3.62, 4.08, 4.08, 4.22, 4.93, 3.08, 3.15, 3,
|
|
|
|
3.77, 3.54, 3.9, 3.9, 3.92, 3.69, 3.92, 3.92, 3.07, 3.07,
|
|
|
|
3.07, 3.08, 4.43, 4.22, 3.7, 2.76, 4.11
|
|
|
|
), label = "Rear axle ratio", class = c(
|
|
|
|
"labelled",
|
|
|
|
"numeric"
|
|
|
|
)), wt = structure(c(
|
|
|
|
3.435, 5.25, 3.84, 5.345, 2.32,
|
|
|
|
3.52, 3.57, 2.77, 2.2, 1.935, 3.17, 1.615, 3.215, 3.44, 5.424,
|
|
|
|
1.513, 3.57, 2.62, 2.875, 3.15, 3.19, 3.44, 3.44, 4.07, 3.73,
|
|
|
|
3.78, 3.845, 2.14, 1.835, 2.465, 3.46, 2.78
|
|
|
|
), label = "Weight", class = c(
|
|
|
|
"labelled",
|
|
|
|
"numeric"
|
|
|
|
)), qsec = structure(c(
|
|
|
|
17.3, 17.98, 15.41, 17.42,
|
|
|
|
18.61, 16.87, 15.84, 15.5, 19.47, 18.9, 14.5, 18.52, 19.44,
|
|
|
|
17.02, 17.82, 16.9, 14.6, 16.46, 17.02, 22.9, 20, 18.3, 18.9,
|
|
|
|
17.4, 17.6, 18, 17.05, 16.7, 19.9, 20.01, 20.22, 18.6
|
|
|
|
), label = "1/4 mile time", class = c(
|
|
|
|
"labelled",
|
|
|
|
"numeric"
|
|
|
|
)), vs = structure(c(
|
|
|
|
0L, 0L, 0L, 0L, 1L, 0L, 0L,
|
|
|
|
0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L,
|
|
|
|
1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L
|
|
|
|
), label = "V engine?", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), am = structure(c(
|
|
|
|
0L, 0L, 0L, 0L, 1L, 0L, 0L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L
|
|
|
|
), label = "Transmission", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), gear = structure(c(
|
|
|
|
3L, 3L, 3L, 3L, 4L, 3L, 3L,
|
|
|
|
5L, 4L, 4L, 5L, 4L, 3L, 3L, 3L, 5L, 5L, 4L, 4L, 4L, 4L, 4L,
|
|
|
|
4L, 3L, 3L, 3L, 3L, 5L, 4L, 3L, 3L, 4L
|
|
|
|
), label = "Number of forward gears", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), carb = structure(c(
|
|
|
|
2L, 4L, 4L, 4L, 1L, 2L, 4L,
|
|
|
|
6L, 1L, 1L, 4L, 2L, 1L, 2L, 4L, 2L, 8L, 4L, 4L, 2L, 2L, 4L,
|
|
|
|
4L, 3L, 3L, 3L, 2L, 2L, 1L, 1L, 1L, 2L
|
|
|
|
), label = "Number of carburetors", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), color_available___red = structure(c(
|
|
|
|
1L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), label = "Colors Available (choice<-Red)", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), color_available___green = structure(c(
|
|
|
|
1L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), label = "Colors Available (choice<-Green)", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), color_available___blue = structure(c(
|
|
|
|
1L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), label = "Colors Available (choice<-Blue)", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), color_available___black = structure(c(
|
|
|
|
0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), label = "Colors Available (choice<-Black)", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), motor_trend_cars_complete = structure(c(
|
|
|
|
1L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L
|
|
|
|
), label = "Complete?", class = c("labelled", "integer")), letter_group___a = structure(c(
|
|
|
|
1L, 0L, 1L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), label = "Which group? (choice<-A)", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), letter_group___b = structure(c(
|
|
|
|
1L, 0L, 0L, 1L,
|
|
|
|
1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
|
|
|
|
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), label = "Which group? (choice<-B)", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), letter_group___c = structure(c(
|
|
|
|
0L, 0L, 1L, 1L,
|
|
|
|
1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), label = "Which group? (choice<-C)", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), choice = structure(c(
|
|
|
|
3L, 1L, 2L, 2L, 1L, 1L,
|
|
|
|
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
|
|
|
|
), levels = c(
|
|
|
|
"",
|
|
|
|
"choice1", "choice2"
|
|
|
|
), class = c("labelled", "factor"), label = "Choose one"),
|
|
|
|
grouping_complete = structure(c(
|
|
|
|
2L, 0L, 2L, 2L, 0L, 0L, 1L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
|
|
|
|
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L
|
|
|
|
), label = "Complete?", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), cyl.factor = structure(c(
|
|
|
|
6L, 6L, 6L, 6L, 2L,
|
|
|
|
6L, 6L, 4L, 2L, 2L, 6L, 2L, 4L, 6L, 6L, 2L, 6L, 4L, 4L, 2L,
|
|
|
|
2L, 4L, 4L, 6L, 6L, 6L, 6L, 2L, 2L, 2L, 4L, 2L
|
|
|
|
), levels = c(
|
|
|
|
"3",
|
|
|
|
"4", "5", "6", "7", "8"
|
|
|
|
), class = "factor"), vs.factor = structure(c(
|
|
|
|
2L,
|
|
|
|
2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L,
|
|
|
|
2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L,
|
|
|
|
1L
|
|
|
|
), levels = c("Yes", "No"), class = "factor"), am.factor = structure(c(
|
|
|
|
1L,
|
|
|
|
1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L,
|
|
|
|
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L,
|
|
|
|
2L
|
|
|
|
), levels = c("Automatic", "Manual"), class = "factor"),
|
|
|
|
gear.factor = structure(c(
|
|
|
|
1L, 1L, 1L, 1L, 2L, 1L, 1L, 3L,
|
|
|
|
2L, 2L, 3L, 2L, 1L, 1L, 1L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L,
|
|
|
|
1L, 1L, 1L, 1L, 3L, 2L, 1L, 1L, 2L
|
|
|
|
), levels = c(
|
|
|
|
"3", "4",
|
|
|
|
"5"
|
|
|
|
), class = "factor"), carb.factor = structure(c(
|
|
|
|
2L, 4L,
|
|
|
|
4L, 4L, 1L, 2L, 4L, 6L, 1L, 1L, 4L, 2L, 1L, 2L, 4L, 2L, 8L,
|
|
|
|
4L, 4L, 2L, 2L, 4L, 4L, 3L, 3L, 3L, 2L, 2L, 1L, 1L, 1L, 2L
|
|
|
|
), levels = c("1", "2", "3", "4", "5", "6", "7", "8"), class = "factor"),
|
|
|
|
color_available___red.factor = structure(c(
|
|
|
|
2L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
|
|
|
|
), levels = c(
|
|
|
|
"Unchecked",
|
|
|
|
"Checked"
|
|
|
|
), class = "factor"), color_available___green.factor = structure(c(
|
|
|
|
2L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L
|
|
|
|
), levels = c("Unchecked", "Checked"), class = "factor"),
|
|
|
|
color_available___blue.factor = structure(c(
|
|
|
|
2L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
|
|
|
|
), levels = c(
|
|
|
|
"Unchecked",
|
|
|
|
"Checked"
|
|
|
|
), class = "factor"), color_available___black.factor = structure(c(
|
|
|
|
1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L
|
|
|
|
), levels = c("Unchecked", "Checked"), class = "factor"),
|
|
|
|
motor_trend_cars_complete.factor = structure(c(
|
|
|
|
2L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
|
|
|
|
), levels = c(
|
|
|
|
"Incomplete",
|
|
|
|
"Unverified", "Complete"
|
|
|
|
), class = "factor"), letter_group___a.factor = structure(c(
|
|
|
|
2L,
|
|
|
|
1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L
|
|
|
|
), levels = c("Unchecked", "Checked"), class = "factor"),
|
|
|
|
letter_group___b.factor = structure(c(
|
|
|
|
2L, 1L, 1L, 2L, 2L,
|
|
|
|
1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
|
|
|
|
), levels = c(
|
|
|
|
"Unchecked",
|
|
|
|
"Checked"
|
|
|
|
), class = "factor"), letter_group___c.factor = structure(c(
|
|
|
|
1L,
|
|
|
|
1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L
|
|
|
|
), levels = c("Unchecked", "Checked"), class = "factor"),
|
|
|
|
choice.factor = structure(c(
|
|
|
|
2L, NA, 1L, 1L, NA, NA, 1L, NA,
|
|
|
|
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2L, NA, NA, NA,
|
|
|
|
NA, NA, NA, NA, NA, NA, NA, NA, NA
|
|
|
|
), levels = c(
|
|
|
|
"Choice 1",
|
|
|
|
"Choice 2"
|
|
|
|
), class = "factor"), grouping_complete.factor = structure(c(
|
|
|
|
3L,
|
|
|
|
1L, 3L, 3L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
|
|
|
|
1L
|
|
|
|
), levels = c("Incomplete", "Unverified", "Complete"), class = "factor")
|
|
|
|
), row.names = c(
|
|
|
|
1L,
|
|
|
|
5L, 6L, 9L, 11L, 12L, 13L, 18L, 19L, 20L, 21L, 22L, 23L, 24L,
|
|
|
|
25L, 26L, 27L, 28L, 29L, 30L, 34L, 35L, 36L, 37L, 38L, 39L, 40L,
|
|
|
|
41L, 42L, 43L, 44L, 45L
|
|
|
|
), class = "data.frame"), sale = structure(list(
|
|
|
|
row = structure(c(
|
|
|
|
1L, 1L, 1L, 3L, 3L, 4L, 7L, 7L, 7L, 7L,
|
|
|
|
20L, 20L, 20L
|
|
|
|
), levels = c(
|
|
|
|
"AMC Javelin", "Cadillac Fleetwood",
|
|
|
|
"Camaro Z28", "Chrysler Imperial", "Datsun 710", "Dodge Challenger",
|
|
|
|
"Duster 360", "Ferrari Dino", "Fiat 128", "Fiat X1-9", "Ford Pantera L",
|
|
|
|
"Honda Civic", "Hornet 4 Drive", "Hornet Sportabout", "Lincoln Continental",
|
|
|
|
"Lotus Europa", "Maserati Bora", "Mazda RX4", "Mazda RX4 Wag",
|
|
|
|
"Merc 230", "Merc 240D", "Merc 280", "Merc 280C", "Merc 450SE",
|
|
|
|
"Merc 450SL", "Merc 450SLC", "Pontiac Firebird", "Porsche 914-2",
|
|
|
|
"Toyota Corolla", "Toyota Corona", "Valiant", "Volvo 142E"
|
|
|
|
), class = c("labelled", "factor"), label = "Name"), redcap_repeat_instrument = c(
|
|
|
|
"sale",
|
|
|
|
"sale", "sale", "sale", "sale", "sale", "sale", "sale", "sale",
|
|
|
|
"sale", "sale", "sale", "sale"
|
|
|
|
), redcap_repeat_instance = structure(c(
|
|
|
|
1L,
|
|
|
|
2L, 3L, 1L, 2L, 1L, 1L, 2L, 3L, 4L, 1L, 2L, 3L
|
|
|
|
), label = "Repeat Instance", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), price = structure(c(
|
|
|
|
12000.5, 13750.77, 15004.57,
|
|
|
|
7800, 8000, 7500, 8756.4, 6800.88, 8888.88, 970, 7800.98,
|
|
|
|
7954, 6800.55
|
|
|
|
), label = "Sale price", class = c(
|
|
|
|
"labelled",
|
|
|
|
"numeric"
|
|
|
|
)), color = structure(c(
|
|
|
|
1L, 3L, 2L, 2L, 3L, 1L,
|
|
|
|
4L, 2L, 1L, 4L, 2L, 1L, 3L
|
|
|
|
), label = "Color", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), customer = structure(c(
|
|
|
|
2L, 12L, 7L, 4L, 14L,
|
|
|
|
5L, 10L, 8L, 3L, 6L, 13L, 9L, 11L
|
|
|
|
), levels = c(
|
|
|
|
"", "Bob",
|
|
|
|
"Erica", "Janice", "Jim", "Juan", "Kim", "Pablo", "Quentin",
|
|
|
|
"Sarah", "Sharon", "Sue", "Ted", "Tim"
|
|
|
|
), class = c(
|
|
|
|
"labelled",
|
|
|
|
"factor"
|
|
|
|
), label = "Customer Name"), sale_complete = structure(c(
|
|
|
|
0L,
|
|
|
|
2L, 0L, 2L, 0L, 2L, 1L, 0L, 0L, 0L, 0L, 0L, 2L
|
|
|
|
), label = "Complete?", class = c(
|
|
|
|
"labelled",
|
|
|
|
"integer"
|
|
|
|
)), redcap_repeat_instrument.factor = structure(c(
|
|
|
|
1L,
|
|
|
|
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
|
|
|
|
), levels = "Sale", class = "factor"),
|
|
|
|
color.factor = structure(c(
|
|
|
|
1L, 3L, 2L, 2L, 3L, 1L, 4L, 2L,
|
|
|
|
1L, 4L, 2L, 1L, 3L
|
|
|
|
), levels = c("red", "green", "blue", "black"), class = "factor"), sale_complete.factor = structure(c(
|
|
|
|
1L,
|
|
|
|
3L, 1L, 3L, 1L, 3L, 2L, 1L, 1L, 1L, 1L, 1L, 3L
|
|
|
|
), levels = c(
|
|
|
|
"Incomplete",
|
|
|
|
"Unverified", "Complete"
|
|
|
|
), class = "factor")
|
|
|
|
), row.names = c(
|
|
|
|
2L,
|
|
|
|
3L, 4L, 7L, 8L, 10L, 14L, 15L, 16L, 17L, 31L, 32L, 33L
|
|
|
|
), class = "data.frame"))
|
|
|
|
)
|
2018-06-28 23:20:14 +02:00
|
|
|
})
|
|
|
|
}
|
2018-06-26 05:48:55 +02:00
|
|
|
|
2019-07-29 18:30:52 +02:00
|
|
|
|
|
|
|
if (requireNamespace("readr", quietly = TRUE)) {
|
2023-04-13 10:57:04 +02:00
|
|
|
metadata <-
|
|
|
|
readr::read_csv(get_data_location(
|
2024-02-27 13:20:21 +01:00
|
|
|
"ExampleProject_DataDictionary_2018-06-07.csv"
|
|
|
|
))
|
2019-07-29 18:30:52 +02:00
|
|
|
|
2023-04-13 10:57:04 +02:00
|
|
|
records <-
|
|
|
|
readr::read_csv(get_data_location(
|
2024-02-27 13:20:21 +01:00
|
|
|
"ExampleProject_DATA_2018-06-07_1129.csv"
|
|
|
|
))
|
2019-07-29 18:30:52 +02:00
|
|
|
|
|
|
|
redcap_output_readr <- REDCap_split(records, metadata)
|
|
|
|
|
|
|
|
expect_matching_elements <- function(FUN) {
|
|
|
|
FUN <- match.fun(FUN)
|
2024-02-27 13:20:21 +01:00
|
|
|
expect_identical(
|
|
|
|
lapply(redcap_output_readr, FUN),
|
|
|
|
lapply(redcap_output_csv1, FUN)
|
|
|
|
)
|
2019-07-29 18:30:52 +02:00
|
|
|
}
|
|
|
|
|
2023-04-13 10:57:04 +02:00
|
|
|
test_that("Result of data read in with `readr` will
|
2024-02-27 13:20:21 +01:00
|
|
|
match result with `read.csv`", {
|
|
|
|
# The list itself
|
|
|
|
expect_identical(
|
|
|
|
length(redcap_output_readr),
|
|
|
|
length(redcap_output_csv1)
|
|
|
|
)
|
|
|
|
expect_identical(
|
|
|
|
names(redcap_output_readr),
|
|
|
|
names(redcap_output_csv1)
|
|
|
|
)
|
|
|
|
|
|
|
|
# Each element of the list
|
|
|
|
expect_matching_elements(names)
|
|
|
|
expect_matching_elements(dim)
|
|
|
|
})
|
2019-07-29 18:30:52 +02:00
|
|
|
}
|