@@ -625,9 +625,15 @@ code_vaccines <- function(input_data, wave) {
625625 if ( all(c(" V15a" , " V15b" ) %in% names(input_data )) ) {
626626 # introduced in Wave 11
627627 vaccine_barriers <- coalesce(input_data $ V15a , input_data $ V15b )
628- vaccine_barriers <- ifelse(vaccine_barriers == " 13" , NA , vaccine_barriers )
629- vaccine_barriers <- split_options(vaccine_barriers )
630-
628+
629+ # If the entire column is NA, ifelse() results in a logical vector, not a
630+ # character vector, which confuses split_options; since the result should be
631+ # NA anyway
632+ if (any(! is.na(vaccine_barriers ))) {
633+ vaccine_barriers <- ifelse(vaccine_barriers == " 13" , NA_character_ , vaccine_barriers )
634+ vaccine_barriers <- split_options(vaccine_barriers )
635+ }
636+
631637 input_data $ v_vaccine_barrier_eligible <- is_selected(vaccine_barriers , " 1" )
632638 input_data $ v_vaccine_barrier_no_appointments <- is_selected(vaccine_barriers , " 2" )
633639 input_data $ v_vaccine_barrier_appointment_time <- is_selected(vaccine_barriers , " 3" )
@@ -685,12 +691,19 @@ code_vaccines <- function(input_data, wave) {
685691 input_data $ v_vaccine_barrier_type_has <- NA
686692 input_data $ v_vaccine_barrier_none_has <- NA
687693 }
688-
694+
689695 if ( " V15b" %in% names(input_data ) ) {
690696 # introduced in Wave 11
691- vaccine_barriers <- ifelse(input_data $ V15b == " 13" , NA , input_data $ V15b )
692- vaccine_barriers <- split_options(vaccine_barriers )
693-
697+ # If the entire column is NA, ifelse() results in a logical vector, not a
698+ # character vector, which confuses split_options; since the result should be
699+ # NA anyway
700+ if (any(! is.na(input_data $ V15b ))) {
701+ vaccine_barriers <- ifelse(input_data $ V15b == " 13" , NA , input_data $ V15b )
702+ vaccine_barriers <- split_options(vaccine_barriers )
703+ } else {
704+ vaccine_barriers <- input_data $ V15b
705+ }
706+
694707 input_data $ v_vaccine_barrier_eligible_tried <- is_selected(vaccine_barriers , " 1" )
695708 input_data $ v_vaccine_barrier_no_appointments_tried <- is_selected(vaccine_barriers , " 2" )
696709 input_data $ v_vaccine_barrier_appointment_time_tried <- is_selected(vaccine_barriers , " 3" )
0 commit comments