gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:18:42 25 4
gpt4 key购买 nike

我正在尝试使用一个名为waldo(see at the tidyverse blog too)的新R包,该包旨在比较数据对象以查找差异。根据文档,waldo::compare()函数返回一个对象:

a character vector with class "waldo_compare"


此功能的主要目的是在控制台内使用,利用着色功能突出显示数据对象之间不相等的突出值。但是,尽管仅在控制台中进行检查很有用,但我确实想获取这些值并对其进行操作(从数据中过滤掉它们,等等)。因此,我想以编程方式提取出色的值(value)。我不知道
例子
  • 生成长度为10的向量:

  • set.seed(2020)

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

    ## [1] 3 15 13 0 16 11 10 12 6 18
  • 创建一个重复的向量,并将其他元素(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
  • 使用waldo::compare()测试两个向量之间的差异

  • waldo::compare(vec_a, vec_b)

    ## `old[8:10]`: 12 6 18
    ## `new[8:11]`: 12 6 18 4
    优点是它在控制台中突出显示:
    waldo

    但是现在,我如何提取不同的值(value)?
    我可以尝试将 waldo::compare()分配给一个对象:
    waldo_diff <- waldo::compare(vec_a, vec_b)
    然后什么?当我尝试做 waldo_diff[[1]]时,我得到:
    [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"
    对于 waldo_diff[[2]]甚至更糟:

    Error in waldo_diff[3] : subscript out of bounds


    知道如何以编程方式提取出现在"new"向量中而不是“旧”向量中的出色值吗?

    最佳答案

    至少在比较两个向量的简单情况下,您会更好
    使用diffobj::ses_dat()(来自 waldo 使用的包
    直接在引擎盖下):

    waldo::compare(1:3, 2:4)
    #> `old`: 1 2 3
    #> `new`: 2 3 4

    diffobj::ses_dat(1:3, 2:4)
    #> op val id.a id.b
    #> 1 Delete 1 1 NA
    #> 2 Match 2 2 NA
    #> 3 Match 3 3 NA
    #> 4 Insert 4 NA 3
    为了完整性,您可以提取其他内容,例如:
    extract_additions <- function(x, y) {
    ses <- diffobj::ses_dat(x, y)
    y[ses$id.b[ses$op == "Insert"]]
    }

    old <- 1:3
    new <- 2:4

    extract_additions(old, new)
    #> [1] 4

    关于r - 如何从waldo::compare()返回的对象中提取未完成的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64806192/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com