Я пытаюсь преобразовать имя объекта в строку внутри анонимной функции. Во-первых, мне нужно вызвать объект обычно в цепочке dplyr, затем использовать имя объекта.
Я пробовал несколько методов, чтобы решить мою проблему, но я не уверен, почему они не работают. Мне удалось при непосредственном вызове объекта, но не внутри функции в цепочке map / lapply.
Я проверил три следующие страницы: В R, как получить имя объекта после оно отправляется в функцию?
Как преобразовать имя переменной (объекта) в строку
, преобразовав выражение в строку в R
Вот несколько урезанных примеров работы, чтобы проиллюстрировать, что я пытаюсь выполнить sh и что я пробовал до сих пор.
Данные (3 тибля):
a18 <- tibble(x = c(1,2,3),
y = c(1,2,3))
a19 <- tibble(x = c(1,2,3),
y = c(1,2,3))
dat <-
structure(list(ID = c("12327701006", "12327601004", "12327601006",
"12327601008", "12327701008", "12327701009", "12327701010", "12327701011",
"12326201002", "12334201009"), GRP = c("169", "169", "169", "169",
"169", "169", "169", "169", "170", "169"), Stat = c(8.8981219,
4.25978943, 9.17077178, 4.13070278, 9.38120484, 4.32074928, 4.60516953,
4.60194847, 14.23145155, 5.00784539)), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -10L))
Попытка
lapply(list(a18, a19),
function(x) (dat %>%
group_by(GRP) %>%
summarize(Stat = sum(Stat)) %>%
ungroup() %>%
mutate(Year = paste0("20", stringr::str_sub(rlang::quo_text(quo(x)), start = -2)))) )
Выход
[[1]]
# A tibble: 2 x 3
GRP Stat Year
<chr> <dbl> <chr>
1 169 54.4 20x
2 170 14.2 20x
[[2]]
# A tibble: 2 x 3
GRP Stat Year
<chr> <dbl> <chr>
1 169 54.4 20x
2 170 14.2 20x
Вот выход, который мне нужен. Он включает полный год, например, «2018» вместо «20x».
Требуемый вывод
[[1]]
# A tibble: 2 x 3
GRP Stat Year
<chr> <dbl> <chr>
1 169 54.4 2018
2 170 14.2 2018
[[2]]
# A tibble: 2 x 3
GRP Stat Year
<chr> <dbl> <chr>
1 169 54.4 2019
2 170 14.2 2019
Я не понимаю, почему он не работает, потому что когда я выполняю следующее за пределами вызова lapply
, он работает, возвращая «18» вместо «x».
stringr::str_sub(rlang::quo_text(quo(a18)), -2)
[1] "18"