14
14
# ' @return list of same length, each entry of which is a vector of selected
15
15
# ' options
16
16
split_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
+ }
18
22
}
19
23
20
24
# ' Test if a specific selection is selected
@@ -648,16 +652,8 @@ code_vaccines <- function(input_data, wave) {
648
652
if ( all(c(" V15a" , " V15b" ) %in% names(input_data )) ) {
649
653
# introduced in Wave 11
650
654
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 )
661
657
662
658
input_data $ v_vaccine_barrier_eligible <- is_selected(vaccine_barriers , " 1" )
663
659
input_data $ v_vaccine_barrier_no_appointments <- is_selected(vaccine_barriers , " 2" )
@@ -677,7 +673,7 @@ code_vaccines <- function(input_data, wave) {
677
673
} else if ( all(c(" V15c" , " V15b" ) %in% names(input_data )) ) {
678
674
# V15c introduced in Wave 12, replacing V15a with clarified wording.
679
675
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 )
681
677
vaccine_barriers <- split_options(vaccine_barriers )
682
678
683
679
input_data $ v_vaccine_barrier_eligible <- is_selected(vaccine_barriers , " 1" )
@@ -769,15 +765,8 @@ code_vaccines <- function(input_data, wave) {
769
765
770
766
if ( " V15b" %in% names(input_data ) ) {
771
767
# 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 )
781
770
782
771
input_data $ v_vaccine_barrier_eligible_tried <- is_selected(vaccine_barriers , " 1" )
783
772
input_data $ v_vaccine_barrier_no_appointments_tried <- is_selected(vaccine_barriers , " 2" )
0 commit comments