2016-10-25 2 views
0

У меня есть длинный список слов, некоторые из которых являются пустыми строками. Это часть списка.Удаление пустых слов в списке в R

17`[[95]] 
[1] "while"  ""   "however" ""   "the"  "right"     "is"  "unsettled" 
[9] ""   "we"  "have"  "avoided" "changing" "the"   "state" 

17`[[96]] 
[1] "of"   "things"  "by"   "taking"  "new"   "posts"   
[7] "or"   "strengthening" "ourselves"  "in"   "the"   "disputed" 

Я пытаюсь избавиться от пустых строк в каждом элементе списка. Я не знаю, как сделать это с помощью регулярных выражений, и не могу понять, почему следующий lapply не работает либо:

new_list = lapply(list, function(x) x = x[x != ""]) 

Вы можете помочь исправить код? Кроме того, знаете ли вы, как использовать regexp для этого? Благодарю.

+3

Вы должны вернуть измененный 'x' объект -' lapply (L , функция (x) {x <- x [x! = ""]; x}) 'Использование' regex' для поиска пустого объекта кажется мне излишним. – thelatemail

+0

@thelatemail не работает. Это тот же результат, что и раньше. Что, если каждый элемент, который я напечатал выше, является самим списком? т.е. это список списков. Это может быть проблема? – Ali

+0

Вот почему предоставление воспроизводимого примера полезно. Ваши данные похожи на 'L <- list (список (c (" один "," "," два ")), список (c (" "," здесь "," это ")))'? – thelatemail

ответ

1

Мы можем использовать grep

lapply(list, function(x) lapply(x, grep, pattern = "^$", value = TRUE, invert = TRUE)) 

Или, как @thelatemail упоминалось рекурсивный применить (rapply) могут быть использованы

rapply(list, grep, pattern = "^$", value = TRUE, invert= TRUE, how = "list") 
+0

Не работал. Это тот же результат, что и раньше. Что, если каждый элемент, который я напечатал выше, является самим списком? т.е. это список списков. Это может быть проблема? – Ali

+0

@Ali Это может быть так. В противном случае он должен работать – akrun

+0

@Ali Я изменил код. Проверьте, работает ли это – akrun

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