【发布时间】:2020-01-11 00:10:34
【问题描述】:
我正在尝试将对象名称转换为匿名函数中的字符串。首先,我需要在 dplyr 链中正常调用对象,然后使用对象的名称。
我尝试了多种方法来解决我的问题,但我不确定它们为什么不起作用。我在直接调用对象时成功了,但不是在 map/lapply 链中的函数内。
我检查了以下三个页面: In R, how to get an object's name after it is sent to a function?
How to convert variable (object) name into String
converting a quosure to a string in R
这里有一些精简的示例工作来说明我正在努力完成的工作以及到目前为止我已经尝试过的工作。
数据(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"
【问题讨论】: