Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何为包装ggplot()的自定义函数编写可选参数?_R_Function_Ggplot2_Arguments_Optional Arguments - Fatal编程技术网

R 如何为包装ggplot()的自定义函数编写可选参数?

R 如何为包装ggplot()的自定义函数编写可选参数?,r,function,ggplot2,arguments,optional-arguments,R,Function,Ggplot2,Arguments,Optional Arguments,我有一个一般性的问题,我找不到满意的答案。我正在构建一组可视化功能,我想让用户在使用它们时具有灵活性。例如,我想将errorbars是否应包含在条形图中,或者geom_text()中的标签是否以百分比或十进制为单位,这是可选的 如果我们想一想ggplot()中的典型代码结构,我们就可以用+分隔元素。因此,如果我想允许可选构造,我可能需要“打开”或“打开”整个geoms(例如,如果用户不想在绘图中使用错误条,则完全忽略geom\u errorbar()),或者在geoms中进行调整(例如,在geo

我有一个一般性的问题,我找不到满意的答案。我正在构建一组可视化功能,我想让用户在使用它们时具有灵活性。例如,我想将errorbars是否应包含在条形图中,或者
geom_text()
中的标签是否以百分比或十进制为单位,这是可选的

如果我们想一想
ggplot()
中的典型代码结构,我们就可以用
+
分隔元素。因此,如果我想允许可选构造,我可能需要“打开”或“打开”整个
geom
s(例如,如果用户不想在绘图中使用错误条,则完全忽略
geom\u errorbar()
),或者在
geom
s中进行调整(例如,在
geom\u text()中更改唯一的
标签
参数)
将标签转换为百分比或保留小数)

我希望我的问题不会带来太多基于观点的答案,而是让人们在使用自定义函数包装
ggplot()
时,列出编码可选参数的标准/典型方式

例子 我想出了一个我不喜欢的解决办法。我认为这使得代码很长,很难阅读。我也不能说它在计算上是否有效。
假设我想为条形图构建一个自定义函数。有几件事我希望它们是“可调整的”:

  • 是否应该对条进行排序(请参见
    reorder\u cols
    参数)
  • 是否提供用户自己的一组x轴标签(请参见
    x轴标签
    参数)
  • 是否添加错误栏(
    add\u errorbar
  • 是否以百分比显示条形标签(
    show_in_percents
  • 然后,根据
    条形图()
    的相关参数,我将每个可选代码分配到一个变量中,并使用一个条件来确定应该包含哪段代码

    库(tidyverse)
    图书馆(扫帚)
    #>警告:包“broom”是在R版本4.0.3下生成的
    
    条形图这不会试图回答所有的问题(因为有几个问题),只是为了展示你可以利用的原理。退房

    其思想是创建一个包含所有ggplot对象(如aes、geom、scale)的列表。返回的
    NULL
    对象将被简单地丢弃。这就是全部的美

    我删除了这个量表,因为它有点难以理解您想要实现的目标。这个想法非常相似。实际上,我把整个问题归结为我认为是问题的要点

    库(tidyverse)
    
    bar_chart@emman如果你想知道百分比标签-这是你精确编码的结果!非常感谢。这就提出了几个后续问题。首先,当我推断想要打开或关闭整个
    geom
    (例如
    geom\u errorbar()
    )时,如果(se)geom\u errorbar(…)
    ,可以通过
    实现,但是在
    geom
    中调整参数需要单独的条件赋值(例如
    my\u label
    )?@emman我认为这在很大程度上取决于你函数的设计,以及你希望用户能够调整的程度。我链接的那本书实际上解决了这个问题。另一个选择可能是使用“…”我明白了,好吧,我会更彻底地阅读这本书。第二个问题与您选择使用
    有关,新的简单答案是{{{{is reserved for in-specific tidyverse objects,如aes()-虽然你完全正确,但这可能过于简单化。我应该开始使用reprex。感谢你回答这个错误示例。我更新了问题中的代码。@tjebo,我已经更新了代码,这次使用的是reprex:-)