解压...缺少参数

2024-04-15

我正在编写一个接受可变数量参数的函数。此外,我希望用户能够将其中一些参数保留为缺失。

只考虑转动的任务...到参数列表中。这是我的第一次尝试:

f <- function(...) list(...)

这失败了:

f(1,,2)
## Error in f(1, , 2) : argument is missing, with no default

我希望结果是list(1, NULL, 2)。 (我不担心区分f(1,,2) from f(1,NULL,2).)

这是我的第二次尝试:

g <- function(...)
{
    args <- match.call()
    miss <- vapply(args, identical, NA, quote(expr=))
    args[miss] <- list(NULL)
    args[[1L]] <- quote(list)
    eval.parent(args)
}

这有效(有点):

identical(g(1,,2), list(1, NULL, 2))
## [1] TRUE

但是,转发点时失败:

gg <- function(...) g(...)
identical(gg(1,,2), list(1,NULL,2))
## [1] FALSE

有没有办法达到与g,但是以允许转发点并且不使用match.call()?

编辑:转发点的问题。

尝试以下操作很诱人:

h <- function(...)
{
    args <- substitute(list(...))
    miss <- vapply(args, identical, NA, quote(expr=))
    args[miss] <- list(NULL)
    eval.parent(args)
}

但是,正如 @lionel 指出的,如果您尝试转发,将会出现问题...来自另一个函数:

hh <- function(...) h(letters, ...)
local({ a <- "foo"; h(a) })
## Error in eval(expr, p) : object 'a' not found

看来你要么需要expand.dots的功能match.call,或者你需要使用一个quosure(来自rlang包裹)。


使用 rlang 包,您可以选择在捕获点时忽略空参数:

my_dots <- function(...) {
  rlang::dots_list(..., .ignore_empty = "all")
}

my_dots(1, , 2, )
#> [[1]]
#> [1] 1
#>
#> [[2]]
#> [1] 2

如果您确实需要将空参数翻译为NULL除了引用这些点并在转换缺少的参数后评估它们之外,别无选择。现在如果你这样做eval(substitute(alist(...))如果您尝试通过多个函数调用转发点,您将会遇到麻烦。 Base R 没有提供在原始环境中评估引用参数的方法。

幸运的是,通过捕获 quosures 中的点很容易做到:

library("purrr")  # For convenient map_if()

my_dots <- function(...) {
  quos <- rlang::quos(..., .ignore_empty = "none")
  quos <- map_if(quos, rlang::quo_is_missing, function(x) NULL)
  map(quos, rlang::eval_tidy)
}

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

解压...缺少参数 的相关文章

  • rpart是自动剪枝吗?

    Is rpart自动修剪 生成的决策树rpart比具有自动修剪功能的 Oracle Data Mining 生成的级别要多得多 否 但拟合函数的默认值可能会 提前 停止分割 对于 早期 的某些定义 See rpart control对于您可
  • 如何使用 sprintf 函数在字符中添加前导“0”而不是空格?

    我正在尝试使用sprintf函数为字符添加前导 0 并使所有字符长度相同 然而我得到的是领先空间 My code a lt c 12 123 1234 sprintf 04s a 1 12 123 1234 我试图得到什么 1 0012 0
  • 在 Shiny 中叠加两个 ggplot

    我有一个非常大的数据集 我正在使用 ggplot 在 Shiny 上绘制它 我有一个与 x 轴上的值相关联的滑块 我想用它对选定的数据子集重新着色 并让其余数据保持原样 最简单的选择是重新创建整个绘图 但由于它是一个大型数据集 因此这是一个
  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • 如何使用 R 中的函数 sqlSave() 将数据附加到具有 IDENTITY 主键的 SQL Server 表?

    我在SQL Server中创建了一个表 如下所示 CREATE TABLE testPK ID INT NOT NULL IDENTITY 1 1 PRIMARY KEY NumVal NUMERIC 18 4 现在我想使用 RODBC 函
  • 美人鱼图:调整图表周围的空白

    我在用 Rstudio 编译的 Rmd 报告中使用了美人鱼图 在 HTML PDF 输出中 图表上方和下方有大量空白 请参见下面的示例 Header Text r library DiagrammeR mermaid graph TD cl
  • 将所有分号替换为空格 pt2

    我尝试对 2000 多行关键字的列表运行文本分析 但它们的列出方式如下 战略 管理风格 组织 所以当我使用 tm 删除标点符号时 它就变成了 组织的战略管理风格 我认为这在某种程度上破坏了我常用术语的分析 我尝试过使用 vector lt
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac
  • 如何在基数 R 中进行分组

    我想使用以下 SQL 查询来表达base R 没有任何特定的包 select month day count as count avg dep delay as avg delay from flights group by month d
  • 根据 row_number() 过滤 data.frame

    更新 自从提出这个问题以来 dplyr 已经更新 现在按照 OP 的要求执行 我正在尝试获取第二行到第七行data frame using dplyr 我正在这样做 require dplyr df lt data frame id 1 1
  • R参考类问题

    我正在尝试在 R 中创建一个简单的参考类 这是我的代码 R 初学者 MyClass lt setRefClass MyClass fields list a numeric b numeric methods list initialize
  • R 中使用 `UseMethod()` 与 `inherits()` 来确定对象的类

    如果我需要根据 R 对象的类以不同的方式处理它们 我可以使用if and else在单个函数内 foo lt function x if inherits x list Foo the list else if inherits x num
  • 如何确定 R 包的作者?

    如何确定包的作者是谁 鉴于我们拥有这个广泛使用的代码库 我认为参考我在分析中使用的软件是合适的 有没有办法以编程方式检索作者和任何其他相关信息 在伪代码中 我想执行以下操作 references base 我怎样才能做到这一点 为了能够引用
  • 如何绘制每条线之间具有特定距离的图形

    实际上 我尝试绘制一个图形 但它将所有列 线 放在一起并显示 因此它不具有代表性 我尝试制作模拟数据并向您展示我如何绘制它 并向您展示我想要的内容 我不知道如何制作像下面所示的示例的数据 但我在这里做了什么 set seed 1 M lt
  • 使用 pkg:sjPlot 函数创建一个生成部分斜体单元格的数据框

    我正在尝试创建一个简单的数据表 其中 Coral taxon 列中的属名称为斜体 而 spp 列中的属名称为斜体 属名后面的部分不大写 我尝试使用 expression 函数对 Coral taxon 的每一行进行编码 但没有成功 sum
  • R中整数类和数字类有什么区别

    我想先说我是一个绝对的编程初学者 所以请原谅这个问题是多么基本 我试图更好地理解 R 中的 原子 类 也许这适用于一般编程中的类 我理解字符 逻辑和复杂数据类之间的区别 但我正在努力寻找数字类和整数类之间的根本区别 假设我有一个简单的向量x
  • 在 igraph 中为社区分配颜色

    我在 igraph 中使用 fastgreedy community 检测算法在 R 中生成社区 代码返回 12 个社区 但是在绘图时很难识别它们 因为它返回的图的颜色数量有限 我怎样才能用十二种不同的颜色绘制这个图表 l2 lt layo
  • 如何自动启动我的 ec2 实例、运行命令然后将其关闭?

    我想每周对 redshift postgres 数据库中的数据运行一次机器学习模型 我使用以下命令将 R 脚本设置为休息 apiplumbr然后我将其设置为一项任务来管理pm2 我有它 所以任务会在ec2实例启动然后继续运行 要让 R 脚本
  • 合并数据框而不重复行

    我想合并两个数据框 但如果有多个匹配项 则不想重复行 相反 我想总结一下那天的观察结果 来自 合并 提取两个数据框中与指定列匹配的行并将其连接在一起 如果有多个匹配项 则所有可能的匹配项各贡献一行 这是一些示例代码 days lt as d
  • 不同 R/lme4 版本的单一拟合结果不匹配

    我试图将 R 版本 3 5 3 lme4 1 1 18 1 的随机效应估计与 R 版本 4 1 1 lme4 1 1 27 1 相匹配 然而 当存在奇异拟合时 这两个版本之间的随机效应存在微小差异 我对奇点警告很满意 但令人费解的是不同版本

随机推荐

  • HTML5 音频缓冲区卡住

    我使用 HTML5 webkitAudioContext 使用以下代码获取用户麦克风的实时级别 var liveSource function getLevel var context new webkitAudioContext navi
  • 带参数的 C# ReportViewer 本地报表

    大家下午好 过去 2 周的大部分时间我都在寻求有关 C WinForm 应用程序问题的帮助 我有一个表单 其中有一个 DataGridView 显示从数据库中提取的详细信息 当用户双击该网格中的一行时 代码从 CustomerID 列中获取
  • 重新实例化列表或调用clear()的更好做法

    使用 Java 1 6 是在 List 上调用 clear 方法更好还是只是重新实例化引用更好 我有一个 ArrayList 其中填充了未知数量的对象 并定期 刷新 处理对象并清除列表 一旦刷新 列表就会再次填满 刷新是随机发生的 列表中的
  • 如何检查 CGPoint 是否已初始化?

    我想最初将 CGPoint 属性设置为特定点 屏幕中间 随后其他方法可能希望更改此属性 我的想法是如果 getter 中为空则初始化它 但我收到消息 invalid argument type struct CGPoint to unary
  • 使用 onclick 调用 Javascript 函数[重复]

    这个问题在这里已经有答案了 我对这段代码有疑问 当我单击按钮时 它应该执行 hello 功能并打开警报 但它不起作用 function hello alert hi document getElementById one onclick h
  • 在 DataFrame 索引中查找标签位置

    我有一个熊猫数据框 import pandas as pnd d pnd Timestamp 2013 01 01 16 00 dates pnd bdate range start d end d pnd DateOffset days
  • 检测何时从单元格本身中选择自定义单元格?

    我创建了一个自定义UITableViewCell 以及故事板设计器中用于布局的 XIB 我了解父表视图如何通过触发通知单元格选择didSelectRowAtIndexPath 但我似乎无法弄清楚如何捕获单元格本身内的单元格选择 有人能在这里
  • HttpUtility.UrlEncode 是否符合“x-www-form-urlencoded”的规范?

    Per MSDN http msdn microsoft com en us library ms525738 aspx URLEncode 转换字符如下 空格 转换为加号 非字母数字字符将转义为其十六进制表示形式 与以下类似 但不完全相同
  • WebRTC 局域网内是否需要 STUN 服务器?

    我使用Webrtc开发了一个p2p视频聊天 我知道需要 STUN 或 TURN 服务器来识别 NAT 后面的公共 IP 目前正在使用 Google 的 STUN 服务器 我的应用程序安装在连接到 LAN 的服务器上 但无法访问互联网 我是否
  • PHP gzuncompress 出现文件读写错误

    我有一个函数可以跟踪脚本中发生的事件 为了有效地利用我的资源 我决定压缩它生成的数据 但是 我不断收到此错误 Unknown error type 2 gzuncompress function gzuncompress data erro
  • Javascript 删除事件监听器不工作

    我有以下代码来添加事件监听器 area addEventListener click function event app addSpot event clientX event clientY app addFlag 1 true 它按预
  • 如何防止全景图在 Windows Phone 7 应用程序中从最后一项滚动到第一项

    是否可以防止当用户查看最后一个 PanoramaItem 时 他可以进一步向右滚动 返回到第一个 PanoramaItem 反之亦然 防止通过向左滑动从第一个滚动到最后一个 我问这个是因为在我的应用程序中我有一个只有 2 个 Panoram
  • 将基本 Access 查询条件表示为正则表达式

    我熟悉 Access 的查询和过滤条件 但我不确定如何将类似的语句表达为正则表达式模式 我想知道是否有人可以帮助将他们与我理解的一些简单示例联系起来 如果我使用正则表达式来匹配 Access 等字段 我将如何表达以下语句 示例与此中找到的示
  • 为什么 ImageView 无法在 SystemClock.sleep() 之前更新

    我想在翻转旧图像后 3 秒内在 ImageView 中显示其他图像 代码 OnClickListener oc new OnClickListener Override public void onClick View v ImageVie
  • Jobb 崩溃 FAT 已满

    我尝试使用 jobb 库编译视频 问题是 jobb 崩溃 视频大小超过 500 MB 以下是有关此问题的一些信息 java io IOException FAT Full 459872 459873 at de waldheinz fs f
  • 检查字符串是否是编译时已知的文字字符串?

    我正在编写一个库 并且我有一个接受字典的方法 字典的值是不可信 不安全的 但密钥是可信的 如果最终用户能够输入任意密钥名称 那么可能会发生 坏事 所以当其他开发者使用这个库函数时 我想强制他们在编译时知道键名 所以这样的事情是被允许的 st
  • 不知道如何在给定私钥和消息的情况下生成 ECDSA 签名

    我正在跟进苹果的指南 https developer apple com library ios documentation DataManagement Conceptual CloutKitWebServicesReference Se
  • 两个非常相似的集合之一上的“‘dimnames’[2] 的长度不等于数组范围”

    我在两个数据框中收集了数据vols and flow 后者可以转换为矩阵 但第一个不能 as matrix vols Error in colnames lt tmp value c CanovesSamalus Llinars lengt
  • PHPExcel 一起单元格包含相同的数据问题

    当我使用 PHPExcel 类读取 ods 文件 xls 和 xlsx 都可以 并且两个单元格在一起并包含相同的数据时 第二个单元格变为空白 这是一个错误吗 这是我的代码
  • 解压...缺少参数

    我正在编写一个接受可变数量参数的函数 此外 我希望用户能够将其中一些参数保留为缺失 只考虑转动的任务 到参数列表中 这是我的第一次尝试 f lt function list 这失败了 f 1 2 Error in f 1 2 argumen