提问人:biomiha 提问时间:11/17/2023 更新时间:11/17/2023 访问量:69
有没有一种基本管道方法,可以使用列的唯一值从 ggplot 管道进入实验室
Is there a base pipe way of using the unique value of a column to pipe into labs from ggplot
问:
问题相当简单 - 如果我采用一个 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 之外,还有其他选择吗?
答:
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 占位符时,这是一个很好的技巧!
评论