#r #list
#r #Список
Вопрос:
У меня есть список, содержащий 10000 элементов, каждый элемент содержит таблицу с разным количеством столбцов, пример списка (с меньшим количеством элементов) показан ниже. Есть ли способ выбрать только элементы с двумя столбцами в дополнительном списке, но показывать только цифры, а не символы (как в примере [[1]]
)?
$`1`
a g
41 498
$`2`
c t g
40 499 1
$`3`
a c g t
28 36 466 9
$`4`
t
539
Ожидаемый результат будет:
$`1`
41 498
Знаете ли вы какое-либо решение?
Комментарии:
1. У вас есть
table
объект илиdata.frame
или просто названный вектор в качествеlist
элемента2. он просто называется vector, спасибо за ваш ответ.
Ответ №1:
Мы можем использовать lengths
для создания логического вектора для подмножества list
, затем перебирать подмножество list
и unname
или преобразовывать в vector
с as.vector
помощью или unlist
(если это data.frame)
lapply(lst1[lengths(lst1) == 2], unname)
#$`1`
#[1] 41 498
Если они находятся data.frame
в list
lapply(lst1[sapply(lst1, ncol) == 2], unlist, use.names = FALSE)
данные
lst1 <- list(`1` = c(a = 41, g = 498), `2` = c(c = 40, t = 499, g = 1
), `3` = c(a = 28, c = 36, g = 466, t = 9), `4` = c(t = 539))
Ответ №2:
Здесь я использую lapply, чтобы найти, какие длины равны 2, а затем индексировать.
пусть L будет вашим списком
L[lapply(L,length) == 2]
Ответ №3:
Может быть, вы можете попробовать
subset
с помощьюlengths
> subset(lst,lengths(lst)==2)
$`1`
a g
41 498
Filter
> Filter(function(x) length(x)==2,lst)
$`1`
a g
41 498
Данные
> dput(lst)
list(`1` = c(a = 41, g = 498), `2` = c(c = 40, t = 499, g = 1
), `3` = c(a = 28, c = 36, g = 466, t = 9), `4` = c(t = 539))