1414# ' @return list of same length, each entry of which is a vector of selected
1515# ' options
1616split_options <- function (column ) {
17- return (strsplit(column , " ," , fixed = TRUE ))
17+ if ( any(! is.na(column )) ) {
18+ return (strsplit(column , " ," , fixed = TRUE ))
19+ } else {
20+ return (rep(list (NA_character_ ), length(column )))
21+ }
1822}
1923
2024# ' Test if a specific selection is selected
@@ -648,16 +652,8 @@ code_vaccines <- function(input_data, wave) {
648652 if ( all(c(" V15a" , " V15b" ) %in% names(input_data )) ) {
649653 # introduced in Wave 11
650654 vaccine_barriers <- coalesce(input_data $ V15a , input_data $ V15b )
651-
652- # If the entire column is NA, ifelse() results in a logical vector, not a
653- # character vector, which confuses split_options; since the result should be
654- # NA anyway
655- vaccine_barriers <- as.character(
656- ifelse(vaccine_barriers == " 13" , NA_character_ , vaccine_barriers )
657- )
658- if (any(! is.na(vaccine_barriers ))) {
659- vaccine_barriers <- split_options(vaccine_barriers )
660- }
655+ vaccine_barriers <- ifelse(vaccine_barriers == " 13" , NA_character_ , vaccine_barriers )
656+ vaccine_barriers <- split_options(vaccine_barriers )
661657
662658 input_data $ v_vaccine_barrier_eligible <- is_selected(vaccine_barriers , " 1" )
663659 input_data $ v_vaccine_barrier_no_appointments <- is_selected(vaccine_barriers , " 2" )
@@ -677,7 +673,7 @@ code_vaccines <- function(input_data, wave) {
677673 } else if ( all(c(" V15c" , " V15b" ) %in% names(input_data )) ) {
678674 # V15c introduced in Wave 12, replacing V15a with clarified wording.
679675 vaccine_barriers <- coalesce(input_data $ V15c , input_data $ V15b )
680- vaccine_barriers <- ifelse(vaccine_barriers == " 13" , NA , vaccine_barriers )
676+ vaccine_barriers <- ifelse(vaccine_barriers == " 13" , NA_character_ , vaccine_barriers )
681677 vaccine_barriers <- split_options(vaccine_barriers )
682678
683679 input_data $ v_vaccine_barrier_eligible <- is_selected(vaccine_barriers , " 1" )
@@ -769,15 +765,8 @@ code_vaccines <- function(input_data, wave) {
769765
770766 if ( " V15b" %in% names(input_data ) ) {
771767 # introduced in Wave 11
772- # If the entire column is NA, ifelse() results in a logical vector, not a
773- # character vector, which confuses split_options; since the result should be
774- # NA anyway
775- vaccine_barriers <- as.character(
776- ifelse(input_data $ V15b == " 13" , NA , input_data $ V15b )
777- )
778- if (any(! is.na(vaccine_barriers ))) {
779- vaccine_barriers <- split_options(vaccine_barriers )
780- }
768+ vaccine_barriers <- ifelse(input_data $ V15b == " 13" , NA_character_ , input_data $ V15b )
769+ vaccine_barriers <- split_options(vaccine_barriers )
781770
782771 input_data $ v_vaccine_barrier_eligible_tried <- is_selected(vaccine_barriers , " 1" )
783772 input_data $ v_vaccine_barrier_no_appointments_tried <- is_selected(vaccine_barriers , " 2" )
0 commit comments