2016-02-17 3 views
2

У меня есть список списков/векторов:R удалить пустые (NCHAR = 0) элементы из списка списков

list(c("cat1", "cat6", ""), c("cat5", "cat3", "cat4"), c("cat6", 
"cat4", ""), c("cat5", "cat1", "cat2", "cat4"), c("cat6", "cat3", 
"cat2")) 

и я ищу элегантный способ, чтобы удалить внутренние элементы с NCHAR = 0, таких как 3-й элемент в первом списке (со значением ""). Я пробовал:

l[lapply(l,length)>0] 

, но это не относится к длине внутренних элементов, а к внешней длине списка элементов. Ожидаемый результат:

list(c("cat1", "cat6"), c("cat5", "cat3", "cat4"), c("cat6", 
    "cat4"), c("cat5", "cat1", "cat2", "cat4"), c("cat6", "cat3", 
    "cat2")) 

Любой помощь оценила

+2

Вы можете попробовать 'sapply (l, function (x) x [nchar (x)> 0])' – Gopala

ответ

1

Мы можем использовать nzchar создать логический индекс TRUE/FALSE для непробельных/пустых элементов, а затем подмножества в list элементов.

lapply(l, function(x) x[nzchar(x)]) 

Или другой вариант setdiff для удаления элемента, которые являются '' от каждого из list элементов.

lapply(l, setdiff, '') 

length функция будет считать '', поэтому он не будет иметь большую помощь в устранении ''.

+1

отлично, спасибо. Работать хорошо. Очень элегантный (я использовал nzchar) – Neuril

 Смежные вопросы

  • Нет связанных вопросов^_^