2017-01-12 88 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