Мы можем передать vector
строк и затем использовать mget
, чтобы получить значения
get_bind_dfs <- function(str1 ){
dplyr::bind_rows(mget(str1, envir = .GlobalEnv))
}
get_bind_dfs(paste0("df_", 1:3))
# A tibble: 8 x 11
# mpg cyl disp hp drat wt qsec vs am gear carb
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 21.0 6.00 160 110 3.90 2.62 16.5 0 1.00 4.00 4.00
#2 21.0 6.00 160 110 3.90 2.88 17.0 0 1.00 4.00 4.00
#3 18.1 6.00 225 105 2.76 3.46 20.2 1.00 0 3.00 1.00
#4 14.3 8.00 360 245 3.21 3.57 15.8 0 0 3.00 4.00
#5 24.4 4.00 147 62.0 3.69 3.19 20.0 1.00 0 4.00 2.00
#6 19.7 6.00 145 175 3.62 2.77 15.5 0 1.00 5.00 6.00
#7 15.0 8.00 301 335 3.54 3.57 14.6 0 1.00 5.00 8.00
#8 21.4 4.00 121 109 4.11 2.78 18.6 1.00 1.00 4.00 2.00
Или передать data.frames как list
, который bind_rows
может принять
get_bind_dfs <- function(one_or_more_dfs){
dplyr::bind_rows(one_or_more_dfs)
}
get_bind_dfs(list(df_1, df_2, df_3))
# A tibble: 8 x 11
# mpg cyl disp hp drat wt qsec vs am gear carb
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 21.0 6.00 160 110 3.90 2.62 16.5 0 1.00 4.00 4.00
#2 21.0 6.00 160 110 3.90 2.88 17.0 0 1.00 4.00 4.00
#3 18.1 6.00 225 105 2.76 3.46 20.2 1.00 0 3.00 1.00
#4 14.3 8.00 360 245 3.21 3.57 15.8 0 0 3.00 4.00
#5 24.4 4.00 147 62.0 3.69 3.19 20.0 1.00 0 4.00 2.00
#6 19.7 6.00 145 175 3.62 2.77 15.5 0 1.00 5.00 6.00
#7 15.0 8.00 301 335 3.54 3.57 14.6 0 1.00 5.00 8.00
#8 21.4 4.00 121 109 4.11 2.78 18.6 1.00 1.00 4.00 2.00
Или другой вариант - использовать три точки в качестве аргумента, а затем вычислить, преобразовав в quosures
library(purrr)
get_bind_dfs <- function(...) {
exprs <- rlang::enquos(...)
map(exprs, rlang::eval_tidy) %>%
bind_rows
}
get_bind_dfs(df_1, df_2, df_3)
# A tibble: 8 x 11
# mpg cyl disp hp drat wt qsec vs am gear carb
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 21.0 6.00 160 110 3.90 2.62 16.5 0 1.00 4.00 4.00
#2 21.0 6.00 160 110 3.90 2.88 17.0 0 1.00 4.00 4.00
#3 18.1 6.00 225 105 2.76 3.46 20.2 1.00 0 3.00 1.00
#4 14.3 8.00 360 245 3.21 3.57 15.8 0 0 3.00 4.00
#5 24.4 4.00 147 62.0 3.69 3.19 20.0 1.00 0 4.00 2.00
#6 19.7 6.00 145 175 3.62 2.77 15.5 0 1.00 5.00 6.00
#7 15.0 8.00 301 335 3.54 3.57 14.6 0 1.00 5.00 8.00
#8 21.4 4.00 121 109 4.11 2.78 18.6 1.00 1.00 4.00 2.00
Когда мы объединяем (c
) нескольких data.frame
(то есть list
столбцов), он теряет атрибут data.frame
и добавляет столбцы в list
c(df_1, df_2)