R ggplot2 facet_grid与vars():如何处理缺少的参数?

马蒂福

我想对ggplot使用简洁的评估facet_grid,但不知道如何允许缺少参数?

ggplot23.0.0引入了功能vars()(请参阅新闻),例如在facet_grid中使用整洁的评估。但是我不清楚如何处理丢失/ NULL参数?

在下面的代码中,我该如何做而不将任何参数传递给wrap_by(即使用p + wrap_by())都不会返回错误?

library(ggplot2)
#> Registered S3 methods overwritten by 'ggplot2':
#>   method         from 
#>   [.quosures     rlang
#>   c.quosures     rlang
#>   print.quosures rlang
p <- ggplot(mtcars, aes(wt, disp)) + geom_point()
wrap_by <- function(...) {
  facet_wrap(vars(...), labeller = label_both)
}
p + wrap_by() #ERROR!
#> Can't subset with `[` using an object of class NULL.

用例:我想拥有一个定义构面变量的函数,但希望将其设为可选。

fac_by <- function(var_fac1, var_fac2) {
  facet_grid(rows=vars(!!enquo(var_fac1)), 
             cols=vars(!!enquo(var_fac2)))
}

p+ fac_by(vs, am)
p+ fac_by(var_fac1=vs) # won't work

这里的问题是,理想情况下,我会允许任一行,两个col(理想情况下也不允许facet_grid(NULL, NULL),尽管使用似乎不可能

Moody_Mudskipper

你可以做 :

fac_by <- function(var_fac1, var_fac2) {
  # retrieve the arguments from the call
  args_ <- rlang::call_args(match.call())
  # rename them (use na.omit on top of it if you have more arguments)
  names(args_) <- c(var_fac1 = "rows", var_fac2 = "cols")[names(args_)]
  # apply vars on them
  args_ <- purrr::map(args_, vars)
  # build the call
  call_ <- as.call(c(quote(facet_grid),args_))
  eval(call_)
}

p+ fac_by(vs, am)
p+ fac_by(var_fac1=vs)

使用ifmissing将会更简单:

fac_by <- function(var_fac1, var_fac2) {
  facet_grid(rows=if(missing(var_fac1)) NULL else enquos(var_fac1), 
             cols=if(missing(var_fac2)) NULL else enquos(var_fac2))
} 

p+ fac_by(vs, am)
p+ fac_by(var_fac1=vs)

请注意,您可以使用enquos(var_fac1)代替vars(!!enquo(var_fac1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ggplot2 R图中设置轴的极限?

如何在ggplot2或R中绘制雷达图

在R中,处理错误:ggplot2不知道如何处理数值类的数据

ggplot2:添加用于facet_grid的变量的名称

R [ggplot2]如何设置刻度大小?

使用R中的facet_grid的ggplot2 boxplot中的表达式分别更改x标签

R ggplot2 aes参数

R ggplot2如何通过aes获取列名?

如何使用ggplot2在R中绘制菱形?

R / ggplot 2-使用Facet_grid和geom直方图/误差线处理不均匀的组大小

使用ggplot2 facet wrap R的控制图

R和ggplot 2:如何在ggplot2 R图中设置轴的分位数限制?

R ggplot2:如何更改点的粗细?

如何在ggplot2的甘特图R中使用facet_grid

在不同的facet_grid图中相等的面板高度,ggplot2 R

在R ggplot2和ggforce中使用facet_wrap_paginate缺少x轴标签

r-如何在ggplot2中使用facet_grid获得长标签以适合?

R ggplot2映射问题,自动缺少状态信息

如何用密度图覆盖线图?(R,ggplot2)

R ggplot2类似于facet_grid的结果,但具有独立列

ggplot2中的facet_grid错误

R ggplot facet_grid 多箱线图

如何在 R 中使用 ggplot2 编辑图例?

结合 facet_grid (ggplot2) 和 denscomp (fitdistrplus)

R Shiny ggplot2 折线图在使用“key”属性和 facet_grid 时不会显示线条

R:GGPLOT2:如何使用 stat_summary 在 ggplot2 的折线图中添加标签

如何在ggplot2 facet_grid中为R平方方程着色并将其移动到下一行?

如何返回预期的图形(ggplot2,r 中的椭圆)?

ggplot2 R中的facet_grid函数的非线性拟合