R:使用省略号参数 (...)

2023-11-23

我想创建一个包装函数来替换一些默认参数。

这是我正在努力解决的问题的核心:

Error in localWindow(xlim, ylim, log, asp, ...) : 
  formal argument "cex" matched by multiple actual arguments

现在介绍一下背景。假设我为绘图定义了一个包装函数,如下所示:

myplot <- function(x, ... ) {
    plot(x, cex= 1.5, ... )
}

如果我打电话myplot( 1:10, cex= 2 )我会收到上述错误。我知道我可以转身...到一个列表

l <- list(...)

然后我可以做

if( is.null( l[["cex"]] ) ) l[["cex"]] <- 2

但是,如何将此列表“插入”回省略号参数?像这样的东西(我知道这行不通):

... <- l

编辑:我可以使用默认值myplot定义(如@Thomas 的答案中所建议的),但我不想:函数界面会变得混乱。我想我可以定义一个像这样的辅助函数:

 .myfunchelper <- function( x, cex= 2.0, ... ) {
   plot( x, cex= cex, ... )
 }

 myfunc <- function( x, ... ) {
    .myfunchelper( x, ... )
 }

但是(i)它不太优雅并且(ii)不能满足我的好奇心。


实际答案:

您可以通过一些技巧来做到这一点。首先,像以前一样定义函数,但在函数内包含一个包含默认参数的列表。然后你可以解析通过传入的任何参数...作为列表,将默认值替换为...然后将更新后的参数列表传递给do.call.

myplot <- function(x, ...) {
    args1 <- list(cex=4, main="Default Title") # specify defaults here
    inargs <- list(...)
    args1[names(inargs)] <- inargs
    do.call(plot, c(list(x=x), args1))
}

myplot(x=1:3) # call with default arguments
myplot(x=1:3, cex=2, main="Replacement", xlab="Test xlab") # call with optional arguments

之前的评论:

通过几个示例函数可以看出这里的问题:

myplot1 <- function(x, ... ) {
    plot(x, cex= 1.5, ... )
}

myplot2 <- function(x, cex=3, ... ) {
    plot(x, cex=cex, ... )
}

myplot3 <- function(x, ... ) {
    plot(x, ... )
}

myplot1(1:3, cex=3) # spits your error
myplot2(1:3, cex=3) # works fine
myplot3(1:3, cex=3) # works fine

In myplot2,您指定默认值cex但可以改变它。在myplot3, cex就是简单的通过了。如果你跑myplot2有两个cex参数,你会看到你的函数发生了什么(myplot1):

myplot2(1:3, cex=3, cex=1.5) # same error as above

因此,您可能最好避免设置任何默认值plot(),这样你就可以通过任何东西... in myplot.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:使用省略号参数 (...) 的相关文章

  • 为什么 ggplot2 图例不结合手动填充和缩放值?

    预期行为 如果我用 ggplot2 创建一个绘图并使用单独的形状和填充比例来描绘数据 我希望图例会在 白色 填充点 看起来是空心的 和 黑色 填充点 看起来不空洞的 在下面的示例代码中 Windows 的图例项应为白色空心点 Linux 的
  • 不同大小组的高效递归随机抽样

    这个问题是我之前关于递归随机抽样问题的后续问题高效的递归随机采样 https stackoverflow com questions 69824065 efficient recursive random sampling 当组大小相同或每
  • 删除 R 中的胡须和异常值

    我有连续的数据 我想用它来绘制R s plotly with a box or violin没有异常值和胡须的绘图 set seed 1 df lt data frame group c rep g1 500 rep g2 700 rep
  • 有没有办法将字母扩展到超过 26 个字符,例如 AA、AB、AC...?

    我大部分时间都使用字母来表示我的因素 但今天我尝试超过 26 个字符 LETTERS 1 32 期待有自动递归因式分解 AA AB AC 但很失望 这只是字母的限制还是有办法使用其他函数来获取我正在寻找的内容 702够吗 LETTERS70
  • 抑制 r markdown 中的控制台输出,但保留绘图

    嗨 我有以下降价块 r echo FALSE warning FALSE message FALSE error FALSE lapply obj function x plot x main some plot box axis 1 at
  • 在 RStudio 控制台中显示西里尔字母

    我在 Rstudio 控制台中显示俄语字符时遇到问题 我使用 readxl 包加载带有俄语的 Excel 文件 西里尔字母在数据框中正确显示 但是 如果我运行一个输出包含变量名称的函数 RStudio 控制台将显示符号而不是正确的西里尔字符
  • R 中的 For 循环分配给数据框

    运行 for 循环后 我在分配给数据帧时遇到问题 当我使用 print 时 它给出了我的价值 有什么解释吗 salesdate lt rep seq from as Date 2013 12 19 to as Date 2013 12 23
  • 如何在闪亮的应用程序中显示矩阵,并用条件指定颜色?

    我有一个具有正值和负值的矩阵 M 我正在尝试使用 DT 包在闪亮的应用程序中显示为表格 我想用不同的颜色显示矩阵 红色的正数和负数 例如 到目前为止 我只能以一对一的方式添加颜色 但我想以这种方式添加颜色 如果matrix values g
  • 将 R 传单地图保存为 html:不包括图块

    我正在尝试使用 saveWidget 或将 rmd 文件输出到 html 来保存 R 传单地图 如下所述 将传单输出保存为 html https stackoverflow com questions 30110377 saving lea
  • 使用 dplyr 按组计算加权平均值(并复制其他方法)

    我对语法感到困惑dplyr当尝试计算加权平均值时 我听从大卫的建议here https stackoverflow com a 27609266 1457380 语法非常透明 因此很有吸引力 但它似乎没有按我的预期工作 低于加权平均值是针对
  • 如何重试错误语句?

    如果某个语句出错 我如何简单地告诉 R 重试该语句几次 例如 我希望做类似的事情 tryCatch dbGetQuery Query database error function e if is locking error e If da
  • ts(x) 中的错误:“ts”对象必须有一个或多个观察结果

    当我使用进行预测时forecast库 我注意到以下代码没有按预期运行 library forecast library dplyr df1 lt data frame gp gl 20 5 dt seq 1 100 get lt funct
  • 在 R 绘图上使用鼠标书写?

    我使用创建了散点图plot R 中的函数 有没有可能在这个图上画图 我想添加一条直线并获取它的参数 但在我看来abline 可能会很不方便 我想画很多条线 然后选择一条最合适的 我怎样才能完成这个任务 看看 RStudio 和这个例子 li
  • 如何连接 R 列表中的多个 .wav 文件?

    我有一个 wav 文件列表my list library seewave library tuneR data tico audio lt tico freq lt 22050 breaks lt c 0 0 2 0 4 0 6 0 8 i
  • 在R中提取其他两个字符串之间的字符串

    我试图找到一种简单的方法来提取出现在两个已知子字符串之间的未知子字符串 可以是任何内容 例如 我有一个字符串 a lt anything goes here STR1 GET ME STR2 anything goes here 我需要提取
  • 生成与现有变量具有预定义相关性的二进制变量

    对于模拟研究 我想生成一组随机变量 连续变量和二元变量 这些变量与已经存在的变量具有预定义的关联binary变量 此处表示为x 对于这篇文章 假设x是按照下面的代码生成的 但请记住 在现实生活中 x是一个已经存在的变量 set seed 1
  • 如何将带有几行代码的字符数组转换为 data.frame?

    我有以下数组 my list lt c Jan 01 Dec 31 00 00 24 00 Jan 01 Jun 30 12 00 18 00 Jul 06 Dec 31 09 00 19 00 导致以下结果的最短代码是什么 x1 x2 x
  • 如何解决 R 估计中的整数溢出错误

    我正在尝试使用估计模型speedglm在 R 中 数据集很大 约 6988 万行和 38 列 行数和列数相乘得到约 27 亿 超出了整数限制 我无法提供数据 但以下示例重现了该问题 library speedglm large exampl
  • 使用 ggplot2 在一张画布上绘制多个图形[重复]

    这个问题在这里已经有答案了 我正在尝试根据此表将两个 ggplot2 图合并为一个图 Type RatingA RatingB 1 One 3 36 2 Two 5 53 3 One 5 57 4 One 7 74 5 Three 4 38
  • 修改x轴刻度标签

    我正在尝试更改由生成的箱线图的 x 轴刻度标签ggplot2 x 轴是一个分类变量 HabFac 我想要的是将其刻度更改为 6 个化学品 A E 下面是我的代码 raw data read table Read data p TT ggpl

随机推荐

  • 选择 COUNT 中的最大值

    我有一张桌子 很好 它包含一列 app rate unit 类型 nvarchar 我的目标是计算表中每个不同值的数量 并让 DBMS MS Server 2005 为我提供出现次数最多的值 这是我的代码 SELECT MAX app ra
  • OpenCV - 使用倾斜角度(倾斜)调整照片

    I have a camera pointing at a Zen Garden from above However the camera is fixed on the side rather than directly above t
  • 连接到离线 Wi-Fi 并继续使用移动数据(也适用于所有其他应用程序)

    我有一个应用程序需要通过 Wi Fi 连接到硬件 为此 硬件提供了离线 Wi Fi 热点 热点的 DHCP 不会为我们提供网关或 DNS 因此我们立即知道它仅供离线使用 最终用户在工作时必须始终保持 Wi Fi 连接 以便接收传感器数据并在
  • MomentJS/Date对象默认UTC

    我在我的 Angular 项目中使用 MomentJS 并且在不同的日期时区方面遇到了很多问题 我的应用程序不应该考虑任何时区 但是我的后端 api 和前端之间存在这种混乱 当我将标准时刻对象发送到 c 后端时 它默认将其转换为 UTC 并
  • 如何回滚 Slick 3 + Specs2 的集成测试?

    我想为运行流畅的服务编写一些集成测试 然后通过回滚事务来清理 postgresql 数据库 但我没有找到一种方法来做到这一点 我知道我可以测试组合在一起的 DBIO 对象并将它们回滚 但如果我想在更高的抽象级别进行测试 这似乎是不可能的 在
  • 结果两边的括号在 return 语句中重要吗?

    函数内这两个语句有区别吗 bool returnValue true Code that does something return returnValue 和这个 bool returnValue true Code return ret
  • NoClassDefFoundError 错误编码

    我正在尝试在 Spring Boot 应用程序中运行 JUnit 测试 但收到如下所示的 NoClassDefFoundError 错误 spring boot starter parent 和 spring boot starter te
  • 2020 年 11 月 1 日 /“帐户保留”:是否必须向“帐户保留”用户显示解释性消息? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有提到here要求在 2020 年 11 月 1 日之前对 账户持有 状态进行适当管理 医生说here 当用户进入帐户保留状态时 您应该利用实时开发者通知来告知您的用户为什么暂停对订
  • 从 Angular 2 发送电子邮件

    如何从 Angular 2 应用程序发送电子邮件 我在 firebase 上托管一个 Angular 2 应用程序 我想通过电子邮件发送联系表格 理想情况下 我的解决方案将使用 Nodejs 但我愿意使用任何能够正确完成工作的东西 以下是我
  • 使用“for”循环迭代字典

    d x 1 y 2 z 3 for key in d print key corresponds to d key Python 如何识别它只需要读取key从字典里 是key一个特殊的关键字 或者只是一个变量 key只是一个变量名 for
  • html 标签上的 Jsoup 属性删除

    我有一个问题 我想过滤某些可能包含 html 的文本 我使用 jsoup 将标签列入白名单并清理标签 效果非常好 我唯一的问题是某些标签可以包含属性 主要是样式或类 但也可能有不同的属性 名称 目标等 在清理时这不是问题 因为它们被很好地剥
  • C#:获取斯堪的纳维亚语言的字母?

    有没有办法获取语言中的字母 我想做分页 我想显示例如字母表的最后 7 个字母 对于荷兰语字母表 t z 是最后 7 个字母 但对于瑞典语字母表 它是 w 即 w x y z 当我将其作为输入时 对于 正常 a z 字母表 我可以生成 使用
  • C、C++ 或 Fortran 中的多元正态 cdf [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有开源软件可以计算 C C 或 Fortran 中高斯分布的多变量 维度大于 3 不是二变量或三变量 数值 cdf 我相信 IMSL 能做到 h
  • Python (Flask) 为 Angular 项目的 index.html 文件提供服务

    有谁知道如何使用 Flask 提供 Angular 单页应用程序 我在提供默认路由 时遇到问题 该路由应该加载index html 和相关组件 这是我的烧瓶功能 app route def hello world return send f
  • 旋转自定义 UITableViewCell

    我有一个自定义 UITableViewCell 其中包含多个 UIButton 每个按钮的框架位置都相对于单元格宽度 我设置了 autoresizingMask UIViewAutoresizingFlexibleWidth 这样当应用程序
  • 将矩阵 R 中的所有元素相加

    我正在尝试添加矩阵中的所有元素 这是我的矩阵的示例 实际矩阵更大 m matrix c 528 479 538 603 nrow 2 ncol 2 m A B male 528 538 female 479 603 我正在尝试这样做 sum
  • React-native 中“不存在捆绑包 URL”是什么意思?

    当我运行react native项目时 出现错误no bundle URL present 但我不知道自己犯了什么错误 我很困惑 解决错误No bundle URL present by 在项目根目录中运行以下命令来删除 iOS 构建目录
  • 允许在运行时不动态分配数组大小吗? [复制]

    这个问题在这里已经有答案了 我已经使用 C 几年了 今天我看到了一些代码 但这怎么可能是完全合法的呢 int main int argc char argv size t size cin gt gt size int array size
  • 如何使用Java获取上传到Amazon S3的文件的进度状态

    我正在使用 Java 将多个文件上传到 Amazon S3 我使用的代码如下 MultipartHttpServletRequest multipartRequest MultipartHttpServletRequest request
  • R:使用省略号参数 (...)

    我想创建一个包装函数来替换一些默认参数 这是我正在努力解决的问题的核心 Error in localWindow xlim ylim log asp formal argument cex matched by multiple actua