3

我的列表看起来像这样:

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

我已经通过 using 获得了相同结构中的逻辑向量列表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)
})

谢谢您的帮助。

4

2 回答 2

2

简单地,

Map(setdiff, have, names(have))
于 2017-01-12T15:46:31.240 回答
1

只需使用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

在基础 R 中,您可以使用Map

Map(function(x, y) x[x != y], what_i_have, names(what_i_have))
于 2017-01-12T15:43:41.350 回答