У меня есть функция, которая создает новый столбец в кадре данных, повторяя имя кадра данных в каждой ячейке:
add_column_with_name <- function(x) {
x$name <- deparse(substitute(x))
return(x)
Работает отдельно:
df_y <- tibble(x = c(1,2,3,4), y = c('a', 'b', 'c', 'd'))
df_y <- add_columns_with_name(df_y)
df_y
# A tibble: 4 x 3
x y name1
<dbl> <chr> <chr>
1 1 a df_y
2 2 b df_y
3 3 c df_y
4 4 d df_y
Но объектимя не отображается, когда я передаю функцию в качестве аргумента для отображения, чтобы применить ее к списку фреймов данных:
df_x <- tibble(x = c(5,6,7,8), y = c('e', 'f', 'g', 'h'))
df_vector <- c(df_x, df_y)
result <- map_df(df_vector, add_column_with_name)
result
# A tibble: 8 x 3
x y name1
<dbl> <chr> <chr>
1 5 e .x[[i]]
2 6 f .x[[i]]
3 7 g .x[[i]]
4 8 h .x[[i]]
5 1 a .x[[i]]
6 2 b .x[[i]]
7 3 c .x[[i]]
8 4 d .x[[i]]
Я также попробовал более элегантный подход:
result <- map_df(df_vector, ~ mutate(., name = deparse(substitute(.))))
result
# A tibble: 8 x 3
x y name
<dbl> <chr> <chr>
1 5 e .
2 6 f .
3 7 g .
4 8 h .
5 1 a .
6 2 b .
7 3 c .
8 4 d .
Я мог бы жестко закодировать значения за то время, которое понадобилось мне, чтобы написать этот пост, но я думаю, что упускаю что-то важное!Возможно ли, что ошибка заключается в использовании deparse (substitute ())?
Спасибо