Skip to content

Commit 2214a30

Browse files
committed
make split_options input and output more regular
1 parent e82b934 commit 2214a30

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

facebook/delphiFacebook/R/variables.R

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ split_options <- function(column) {
1717
if ( any(!is.na(column)) ) {
1818
return(strsplit(column, ",", fixed = TRUE))
1919
} else {
20-
return(rep(NA_character_, length(column)))
20+
return(rep(list(NA_character_), length(column)))
2121
}
2222
}
2323

@@ -652,10 +652,7 @@ code_vaccines <- function(input_data, wave) {
652652
if ( all(c("V15a", "V15b") %in% names(input_data)) ) {
653653
# introduced in Wave 11
654654
vaccine_barriers <- coalesce(input_data$V15a, input_data$V15b)
655-
656-
vaccine_barriers <- as.character(
657-
ifelse(vaccine_barriers == "13", NA_character_, vaccine_barriers)
658-
)
655+
vaccine_barriers <- ifelse(vaccine_barriers == "13", NA_character_, vaccine_barriers)
659656
vaccine_barriers <- split_options(vaccine_barriers)
660657

661658
input_data$v_vaccine_barrier_eligible <- is_selected(vaccine_barriers, "1")
@@ -676,7 +673,7 @@ code_vaccines <- function(input_data, wave) {
676673
} else if ( all(c("V15c", "V15b") %in% names(input_data)) ) {
677674
# V15c introduced in Wave 12, replacing V15a with clarified wording.
678675
vaccine_barriers <- coalesce(input_data$V15c, input_data$V15b)
679-
vaccine_barriers <- ifelse(vaccine_barriers == "13", NA, vaccine_barriers)
676+
vaccine_barriers <- ifelse(vaccine_barriers == "13", NA_character_, vaccine_barriers)
680677
vaccine_barriers <- split_options(vaccine_barriers)
681678

682679
input_data$v_vaccine_barrier_eligible <- is_selected(vaccine_barriers, "1")
@@ -768,9 +765,7 @@ code_vaccines <- function(input_data, wave) {
768765

769766
if ( "V15b" %in% names(input_data) ) {
770767
# introduced in Wave 11
771-
vaccine_barriers <- as.character(
772-
ifelse(input_data$V15b == "13", NA, input_data$V15b)
773-
)
768+
vaccine_barriers <- ifelse(input_data$V15b == "13", NA_character_, input_data$V15b)
774769
vaccine_barriers <- split_options(vaccine_barriers)
775770

776771
input_data$v_vaccine_barrier_eligible_tried <- is_selected(vaccine_barriers, "1")

facebook/delphiFacebook/src/RcppExports.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55

66
using namespace Rcpp;
77

8+
#ifdef RCPP_USE_GLOBAL_ROSTREAM
9+
Rcpp::Rostream<true>& Rcpp::Rcout = Rcpp::Rcpp_cout_get();
10+
Rcpp::Rostream<false>& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get();
11+
#endif
12+
813
// is_selected_cpp
914
LogicalVector is_selected_cpp(List responses, String target);
1015
RcppExport SEXP _delphiFacebook_is_selected_cpp(SEXP responsesSEXP, SEXP targetSEXP) {

facebook/delphiFacebook/unit-tests/testthat/test-variables.R

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,22 @@ library(testthat)
22

33
context("Testing response coding")
44

5+
test_that("split_options splits correctly", {
6+
expect_equal(split_options(c("1", "", "1,2")),
7+
list(c("1"), character(0), c("1", "2")))
8+
9+
# Input logical vector
10+
expect_equal(split_options(c(NA, NA, NA)),
11+
list(NA_character_, NA_character_, NA_character_))
12+
13+
# Input character vector
14+
expect_equal(split_options(c(NA_character_, NA_character_, NA_character_)),
15+
list(NA_character_, NA_character_, NA_character_))
16+
17+
expect_equal(split_options(c("", NA_character_, NA)),
18+
list(character(0), NA_character_, NA_character_))
19+
})
20+
521
test_that("is_selected handles selections correctly", {
622
expect_equal(is_selected(split_options(c("1", "", "1,2")), "1"),
723
c(TRUE, NA, TRUE))
@@ -18,6 +34,18 @@ test_that("is_selected handles selections correctly", {
1834
expect_equal(is_selected(split_options(c("4,54", "3,6,2,54", "5,4,45")),
1935
"54"),
2036
c(TRUE, TRUE, FALSE))
37+
38+
expect_equal(is_selected(c(NA, NA, NA), "14"),
39+
c(NA, NA, NA))
40+
41+
expect_equal(is_selected(c(NA_character_, NA_character_, NA_character_), "14"),
42+
c(NA, NA, NA))
43+
44+
expect_equal(is_selected(list(NA, NA, NA), "14"),
45+
c(NA, NA, NA))
46+
47+
expect_equal(is_selected(list(NA_character_, NA_character_, NA_character_), "14"),
48+
c(NA, NA, NA))
2149
})
2250

2351
test_that("activities items correctly coded", {

0 commit comments

Comments
 (0)