I am using tidycensus to read in some census data. I am starting with loading the variables, and the way I am doing it just feels really clunky. Any advice on a cleaner way to code the load variable bit, so I don't load sf1, sf2, sf3 and sf4 in separately before binding?
ReqPkgs <-
c(
'dplyr',
'tidyverse',
'tidycensus',
'sf'
)
ReqPkgs <- as.list(ReqPkgs)
package.check <- lapply(
ReqPkgs,
FUN = function(x) {
if (!require(x, character.only = TRUE)) {
install.packages(x, dependencies = TRUE)
library(x, character.only = TRUE)
}
}
)
#this is the part I want to tidy up:
vd_20001 <- load_variables(2000, "sf1", cache = TRUE)
vd_20002 <- load_variables(2000, "sf2", cache = TRUE)
vd_20003 <- load_variables(2000, "sf3", cache = TRUE)
vd_20004 <- load_variables(2000, "sf4", cache = TRUE)
vd_2000 <- rbind(vd_20001, vd_20002, vd_20003, vd_20004)
rm(vd_20001, vd_20002, vd_20003, vd_20004)
CodePudding user response:
library(tidyverse)
paste0("sf", 1:4) %>%
map(load_variables, year = 2000, cache = TRUE) %>%
bind_rows()
CodePudding user response:
You can use lapply()
to create your list of objects that you want to rbind()
. Feed this list to do.call()
:
vd_2000 <- do.call(
rbind,
lapply(paste0("sf", 1:4), \(sf) load_variables(2000,sf,cache=T))
)