【问题标题】:How can I remove elements from a list of character vectors?如何从字符向量列表中删除元素?
【发布时间】:2017-01-12 15:39:48
【问题描述】:

我的列表看起来像这样:

what_i_have <- list(A = LETTERS[1:6], B = LETTERS[1:6], C = LETTERS[2:7])

我想根据列表元素的名称从每个向量中删除元素,所以我最终得到了这个:

what_i_want <- list(A = LETTERS[2:6], B = LETTERS[c(1, 3:6)], C = LETTERS[c(2,4:7)])

我可以对i_have_this 进行哪些操作才能访问i_want_this

我已经通过使用purrr::map2(what_i_have, names(what_i_have), function(x, y) x == y) 获得了相同结构中的逻辑向量列表,但是我的大脑在尝试对what_i_have 进行子集化时超负荷。

我错过了什么?你能帮我吗?

tidyverse(或基本 R)解决方案的奖励积分。

library(testthat)
test_that("Turn what I have into what I want", {
  expect_equal(what_i_have, what_i_want)
})

感谢您的帮助。

【问题讨论】:

    标签: r purrr tidyverse


    【解决方案1】:

    简单地说,

    Map(setdiff, have, names(have))
    

    【讨论】:

      【解决方案2】:

      只需使用x[x != y],这将删除与x中名称相同的元素:

      what_i_get <- purrr::map2(what_i_have, names(what_i_have), function(x, y) x[x != y])
      identical(what_i_get, what_i_want)
      # [1] TRUE
      

      在base R中,你可以使用Map:

      Map(function(x, y) x[x != y], what_i_have, names(what_i_have))
      

      【讨论】:

      • 谢谢,我知道这是一个愚蠢的问题,但我的大脑超负荷了!
      • map2(what_i_have, names(what_i_have), ~.x[.x != .y])
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      相关资源
      最近更新 更多