如何从字符向量列表中删除元素?
How can I remove elements from a list of character vectors?
我的列表看起来像这样:
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)
})
感谢您的帮助。
只需使用 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))
简单地说,
Map(setdiff, have, names(have))
我的列表看起来像这样:
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)
})
感谢您的帮助。
只需使用 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))
简单地说,
Map(setdiff, have, names(have))