Как убрать элементы списка в R? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть объект igraph, который я создал с помощью библиотеки igraph. Этот объект является списком. Некоторые из компонентов этого списка имеют длину 2. Я хотел бы удалить все эти.

IGRAPH clustering walktrap, groups: 114, mod: 0.79
+ groups:
  $`1`
     [1] "OTU0041"             "OTU0016"             "OTU0062"            
     [4] "OTU1362"             "UniRef90_A0A075FHQ0" "UniRef90_A0A075FSE2"
     [7] "UniRef90_A0A075FTT8" "UniRef90_A0A075FYU2" "UniRef90_A0A075G543"
    [10] "UniRef90_A0A075G6B2" "UniRef90_A0A075GIL8" "UniRef90_A0A075GR85"
    [13] "UniRef90_A0A075H910" "UniRef90_A0A075HTF5" "UniRef90_A0A075IFG0"
    [16] "UniRef90_A0A0C1R539" "UniRef90_A0A0C1R6X4" "UniRef90_A0A0C1R985"
    [19] "UniRef90_A0A0C1RCN7" "UniRef90_A0A0C1RE67" "UniRef90_A0A0C1RFI5"
    [22] "UniRef90_A0A0C1RFN8" "UniRef90_A0A0C1RGE0" "UniRef90_A0A0C1RGX0"
    [25] "UniRef90_A0A0C1RHM1" "UniRef90_A0A0C1RHR5" "UniRef90_A0A0C1RHZ4"
  + ... omitted several groups/vertices

Например, вот этот:

> a[[91]]
[1] "OTU0099"                "UniRef90_UPI0005B28A7E"

Я пробовал это, но это не работает:

a[lapply(a,length)>2]

Любая помощь?

1 Ответ

3 голосов
/ 14 июня 2019

Поскольку вы не предоставили никаких воспроизводимых данных или примеров, мне пришлось представить несколько фиктивных данных:

# create dummy data
a <- list(x = 1, y = 1:4, z = 1:2)

# remove elements in list with lengths greater than 2:
a[which(lapply(a, length) > 2)] <- NULL

Если вы хотите удалить элементы с длиной, точно равной 2 (вопрос неясен), тогда последняя строка должна быть заменена на:

a[which(lapply(a, length) == 2)] <- NULL
...