如何从 waldo::compare() 返回的对象中提取未完成的值?

2023-12-24

我正在尝试使用一个名为的新 R 包waldo https://github.com/r-lib/waldo (也请参阅 tidyverse 博客 https://www.tidyverse.org/blog/2020/10/waldo/)旨在比较数据对象以查找差异。这waldo::compare()函数返回一个对象,根据文档:

具有“waldo_compare”类的字符向量

此函数的主要目的是在控制台中使用,利用着色功能突出显示数据对象之间不相等的突出值。然而,虽然仅在控制台中检查是有用的,但我确实想获取这些值并对它们采取行动(从数据中过滤掉它们等)。因此,我想以编程方式提取突出的值。我不知道怎么办。

Example

  1. 生成长度为 10 的向量:
set.seed(2020)

vec_a <- sample(0:20, size = 10)

## [1]  3 15 13  0 16 11 10 12  6 18
  1. 创建一个重复向量,并添加附加值 (4) 到第 11 个向量元素。
vec_b <- vec_a
vec_b[11] <- 4
vec_b <- as.integer(vec_b) 

## [1]  3 15 13  0 16 11 10 12  6 18  4
  1. Use waldo::compare()测试两个向量之间的差异
waldo::compare(vec_a, vec_b)

## `old[8:10]`: 12 6 18  
## `new[8:11]`: 12 6 18 4

The beauty is that it's highlighted in the console:
waldo


但现在,我如何提取不同的值?

我可以尝试分配waldo::compare()到一个对象:

waldo_diff <- waldo::compare(vec_a, vec_b)

然后什么?当我尝试做的时候waldo_diff[[1]] I get:

[1] "`old[8:10]`: \033[90m12\033[39m \033[90m6\033[39m \033[90m18\033[39m  \n`new[8:11]`: \033[90m12\033[39m \033[90m6\033[39m \033[90m18\033[39m \033[34m4\033[39m"

and for waldo_diff[[2]]更糟糕的是:

waldo_diff 中的错误[3 https://i.stack.imgur.com/a19yI.png] : 下标越界

知道如何以编程方式提取出现在“新”向量中但不在“旧”向量中的突出值吗?


作为免责声明,在您发布之前我对这个包一无所知,因此这远不是一个权威的答案,但是您无法使用compare()函数,因为它返回一个 ANSI 格式的字符串,准备好进行漂亮的打印。相反,向量的主力似乎是内部函数ses() and ses_context()它返回两个对象之间差异的索引。区别似乎在于ses_context()将结果拆分为不连续差异的列表。

waldo:::ses(vec_a, vec_b)

# A tibble: 1 x 5
     x1    x2 t        y1    y2
  <int> <int> <chr> <int> <int>
1    10    10 a        11    11

结果表明,新向量在位置 11 处开始和结束处有一个加法。

以下简单函数的范围非常有限,并假设仅对新向量中的添加感兴趣:

new_diff_additions <- function(x, y) {
  res <- waldo:::ses(x, y)
  res <- res[res$t == "a",]  # keep only additions
  if (nrow(res) == 0) {
    return(NULL)
  }  else {
    Map(function(start, end) {
      d <- y[start:end]
      `attributes<-`(d, list(start = start, end = end))
    },
    res[["y1"]], res[["y2"]])
  }
}
    
new_diff_additions(vec_a, vec_b)

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

如何从 waldo::compare() 返回的对象中提取未完成的值? 的相关文章

随机推荐

  • data.table join + update with mult='first' 给出了意想不到的结果

    在下面的示例中 我有一个用户表和一个事务表 其中一个用户可以有 0 个 1 个或多个事务 我执行连接 更新mult first 在 users 表上尝试插入一列 指示每个用户第一次发生事务的日期 library data table v1
  • 如何从 XLL UDF 返回数组

    我正在尝试使用 C API 为 Excel 编写一个数组构造函数作为工作表函数 Goal array cons 1 2 3 gt 1 2 3 但是 我没有正确初始化 XLOPER12 在 Excel 中 我的函数当前返回 NUM 我正在将参
  • 模块已经成功安装,但是导入时却找不到? - Python

    我正在尝试使用 graphviz Python 模块 但遇到了这个问题 我在命令提示符下安装了它 但它没有显示在 IPython 中 我还有一个 Python 3 5 32 位 解释器 它显示在其中 但我正在尝试弄清楚如何安装它 以便它在
  • 如何找出 Instruments 中保留对象的内容?

    我最近将我的 iOS 项目转换为 ARC 视图控制器之一没有调用其 dealloc 方法 并且没有根据 Instruments 进行释放 我已经仔细检查了我的所有属性并将适当的属性设置为弱 我还确保任何将视图控制器作为委托的东西都在 vie
  • ZLIB 解压 - 客户端

    我正在以 ZLIB 压缩输入流 使用 Javascript Ajax JQuery 我需要在客户端解压缩它 有办法这样做吗 我已经在 J AVA 中工作了 如下所示 但需要在客户端执行此操作 url new URL getCodeBase
  • 如何在S3中保存数据流? aws-sdk-go 示例不起作用?

    我正在尝试将给定的数据流持久保存到 S3 兼容存储中 在流结束之前 大小是未知的 大小可能从 5MB 到 500GB 不等 我尝试了不同的可能性 但没有找到比自己实现分片更好的解决方案 我最好的猜测是使用我的流填充固定大小的缓冲区并将其写入
  • 神经网络反向传播算法在Python中不起作用

    我正在用 Python 编写一个神经网络 遵循示例here http page mi fu berlin de rojas neural chapter K7 pdf 考虑到神经网络在训练一万次后未能产生正确的值 在误差范围内 反向传播算法
  • 使用jquery创建动态数组

    我需要一些关于 jquery 数组的帮助 var queryArr markersArray each function index var locationId index var locName markersArray index n
  • 如果线程已经忙,newSingleThreadScheduledExecutor 的工作

    我的要求是创建一个服务 在特定的时间间隔后继续检查队列并处理队列中的元素 为了在 10 秒后安排任务 我使用 ScheduledExecutorService schd Executors newSingleThreadScheduledE
  • Oracle 将行数据作为指定数量的唯一条目的列返回

    我有一个 Oracle 表 它按项目编号标识符充当项目的活动日志 更改跟踪器 我想获取最后三个更改并以列格式列出它们 样本数据 Item No Shipping date Last updated 100 01 Sep 16 24 Aug
  • 从 java 获取 Linux 发行版

    从java中 我得到了我正在工作的操作系统的名称 请参阅下面的代码 System out println System getProperty os name 在 windows xp 中 它打印如下 Windows XP 但在 ubunt
  • 在 Hbase shell 上运行多个查询,无需再次调用 hbase shell

    再次调用 shell 需要时间 我想通过调用 hbase shell 一次来执行多个命令 下面的代码仅运行单个查询 cmd echo put test row1 cf a value1 hbase shell 我想在单个 hbase she
  • 数组[1]会发生什么

    我有一大段代码 旨在获取一个数组并对其进行处理 在当前项目中只有一个元素 因此我没有将变量更改为 char 而是将其声明为 char 数组 1 这样 我不需要修改我的代码 也不需要冒添加任何错误的风险 并且如果需求增长 可以轻松地增加它 它
  • 在 C++11 之前,移动语义是如何解决的?

    我最近一直在阅读移动语义以及它是如何引入到 C 11 中的 主要要点是 通过 窃取 临时对象的指针来创建对象 程序可以变得更加高效 这比对临时对象进行深度复制来创建新对象要高效得多 在 C 11 及更高版本 中 这是通过使用右值引用来实现的
  • javascript从X,Y到X1,Y1的平滑动画

    我想慢慢地将图像 或元素 从其实际的 X Y 位置移动到 X1 Y1 当 的时候distanceX 和 X1 之间is equalY 和 Y1 之间的那个很容易 但是 如果 X 差异为 100 像素 Y 差异为 273 像素怎么办 作为 J
  • C++ 中“词法”一词意味着什么?

    我读到有词法常量 词法运算符 词法范围等 术语 词法 如何改变常量 例如字符串文字 任何运算符或某些标识符的范围的含义 词法 意味着它与源代码相关 例如 1是一个词汇常量 奥托 sizeof char 也是一个编译时整型常量表达式 但它不是
  • 在 PHP 中打印小于和大于符号

    我在尝试打印时遇到问题 lt gt 使用 PHP 编写 HTML 中的符号 我正在附加一个字符串
  • 如何向IDEA添加自定义构建脚本?

    有没有一种简单的方法来配置完全自定义的构建过程非Java项目在 IntelliJ IDEA 中 基本上 我只需要运行自定义 shell 命令 而不是任何更智能的构建过程 尝试将这些 shell 命令配置为自定义工具 文件 gt 设置 gt
  • DRF 序列化器字段已重命名为经过验证的数据中的源

    我有一个 drf 序列化器 其中有一个我想重命名的字段 class UserBulkUploadSerializer serializers Serializer is admin serializers BooleanField requ
  • 如何从 waldo::compare() 返回的对象中提取未完成的值?

    我正在尝试使用一个名为的新 R 包waldo https github com r lib waldo 也请参阅 tidyverse 博客 https www tidyverse org blog 2020 10 waldo 旨在比较数据对