Вот упрощенная версия:
cleanNA <- function(data, x){
x <- data[[x]]
x <- na.omit(x)
x <- paste0(x, ".pdf")
return(x)
#Or a one-liner
#paste0(na.omit(data[[x]]), '.pdf')
}
list_vec <- lapply(vector_names, cleanNA, data = data)
list_vec
#[[1]]
#[1] "1.pdf" "1.pdf" "1.pdf" "1.pdf"
#[[2]]
#[1] "2.pdf" "2.pdf" "2.pdf" "2.pdf"
#[[3]]
#[1] "3.pdf" "3.pdf" "3.pdf" "3.pdf"
Лучше хранить данные в списке, чтобы им было легче управлять и чтобы избежать создания большого количества объектов в глобальной среде. Однако, если вы хотите, чтобы они были отдельными векторами, вы можете использовать list2env
:
list_vec <- setNames(list_vec, vector_names)
list2env(list_vec, .GlobalEnv)
data
data <- structure(list(first = c(1L, 1L, 1L, 1L, NA), second = c(2L,
NA, 2L, 2L, 2L), third = c(3L, 3L, 3L, NA, 3L)), class = "data.frame",
row.names = c(NA, -5L))