2017-01-12 56 views
2

我有列表看起来是这样的:如何从字符向量列表中删除元素?

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_thisi_want_this

我已经得到尽可能使用purrr::map2(what_i_have, names(what_i_have), function(x, y) x == y)在同一结构中的逻辑向量的列表,但我的大脑过载尝试子集what_i_have

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

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

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

谢谢你的帮助。

回答

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)) 
+1

谢谢你,我知道这是一个愚蠢的问题,但我的大脑超负荷! – mnfn

+1

或'map2(what_i_have,names(what_i_have),〜.x [.x!= .y])' – hrbrmstr

2

简单,

Map(setdiff, have, names(have)) 
+1

非常感谢 – mnfn