purrr::map和R管道

vc6uscn9  于 2023-04-09  发布在  其他
关注(0)|答案(2)|浏览(130)

这段代码使用旧管道

df |>
group_split(group_lab) %>%
set_names(map_chr(.,~.x$group_lab[1]))

但我希望它能和新管道一起工作有什么建议吗?
该代码适用于新管道。

e4yzc0pl

e4yzc0pl1#

新管道完全 * 不支持 * 占位符的这种用法。
你可以得到的最接近的是IIFE,即:

df |>
  group_split(group_lab) |>
  {\(.) set_names(map_chr(., ~.x$group_lab[1]))}()

...不是很可读。

xsuvu9jc

xsuvu9jc2#

这种操作对于管道来说并不美观,但是您可以很容易地创建一个帮助函数来清理它

set_names_with <- function(x, fn) {
  set_names(x, map_chr(x, fn))
}

举个例子

df <- data.frame(
  a= 1:10,
  group_lab = rep(c("A","B"), each=5)
)

df |>
  group_split(group_lab) |> 
  set_names_with(~.x$group_lab[1])

我们可以传递任何函数,它将接受每个子集并返回一个单一长度的字符向量名称。

相关问题