有没有一种基本管道方法,可以使用列的唯一值从 ggplot 管道进入实验室

Is there a base pipe way of using the unique value of a column to pipe into labs from ggplot

提问人:biomiha 提问时间:11/17/2023 更新时间:11/17/2023 访问量:69

问:

问题相当简单 - 如果我采用一个 df 并对其执行一些过滤步骤,我希望能够将这些输出传输到 ggplot 函数中,并使用特定列的唯一值作为标题。 适用于 magrittr 管和卷曲大括号:

starwars %>% 
  filter(hair_color == "blond") %>%
  {
    ggplot(data = ., aes(x = height, y = mass, col = birth_year)) +
      geom_point() +
      labs(title = unique(.$species))
  }

不适用于等效的基础管道:

starwars |> 
  filter(hair_color == "blond") |> 
  {
    ggplot(data = _, aes(x = height, y = mass, col = birth_year)) +
      geom_point() +
      labs(title = unique(.$species))
  }

Error in { : 
  function '{' not supported in RHS call of a pipe (<input>:3:7)

除了在调用 ggplot 之前分配 df 之外,还有其他选择吗?

R ggplot2 管道

评论


答:

1赞 Friede 11/17/2023 #1

我认为这有效:

library(dplyr)
library(ggplot2)
starwars |> 
  filter(hair_color == "blond") |>
  { \(x)
  ggplot(data = x, aes(x = height, y = mass, col = birth_year)) +
  geom_point() +
  labs(title = unique(x$species)) }() 

请看一下这个。另外,看这里。 经常讨论的错误消息:

{ 中的错误: 管道的 RHS 调用不支持函数“{”(:3:3)

您可能还想尝试:

Sys.setenv(`_R_USE_PIPEBIND_` = TRUE) 
starwars |> 
  filter(hair_color == "blond") |>
  . => { 
    ggplot(data = ., aes(x = height, y = mass, col = birth_year)) +
      geom_point() +
      labs(title = unique(.$species)) }

评论

0赞 biomiha 11/17/2023
啊,是的,谢谢。不知何故,我过于痴迷于数据屏蔽功能。
3赞 G. Grothendieck 11/17/2023 #2

1)将输入包装在具有组件名称的列表中。并将其传递给 .with

library(dplyr)
library(ggplot2)

starwars |> 
  filter(hair_color == "blond") |> 
  list(. = _) |>
  with(ggplot(., aes(x = height, y = mass, col = birth_year)) +
    geom_point() +
    labs(title = unique(.$species))
  )

2)另一种可能性是使用:group_modify

starwars |> 
  filter(hair_color == "blond") |> 
  group_modify(~ ggplot(., aes(x = height, y = mass, col = birth_year)) +
      geom_point() +
      labs(title = unique(.$species))
  )

评论

0赞 GuedesBF 11/18/2023
当我们错过 magrittr 占位符时,这是一个很好的技巧!