2014-11-28 1 views
5

РассмотримПочему strsplit возвращает список

text <- "who let the dogs out" 
fooo <- strsplit(text, " ") 
fooo 
[[1]] 
[1] "who" "let" "the" "dogs" "out" 

выход strsplit список. Первый элемент списка - это вектор, содержащий слова выше.

Почему функция ведет себя так? Есть ли какой-нибудь случай, когда он вернет список с более чем одним элементом?

И я могу получить доступ слова, используя

fooo[[1]][1] 
[1] "who" 

, но там нет более простого способа?

+5

Потому что так оно и было написано. –

+0

Ответ, который любой религиозный фундаменталист мог бы гордиться: «потому что он сделал это так». – FooBar

+1

Ну, если у вас было два элемента в 'text', а' strsplit' вернул вектор, как бы вы определили, какие расколы пришли из какого-либо элемента в 'text'? –

ответ

9

К вашему первому вопросу, одна причины того, что приходит на ум, так что он может держать различные векторы результирующей длины в том же самом объекте, так как векторный над x:

text <- "who let the dogs out" 
vtext <- c(text, "who let the") 
## 
> strsplit(text, " ") 
[[1]] 
[1] "who" "let" "the" "dogs" "out" 

> strsplit(vtext, " ") 
[[1]] 
[1] "who" "let" "the" "dogs" "out" 

[[2]] 
[1] "who" "let" "the" 

Если бы это было быть возвращено как data.frame, matrix и т. д. вместо list, он должен быть дополнен дополнительными элементами.

+3

Правильно, я думал о векторе в 'y', а не в' x'. Отлично. Но я настолько соблазн изменить ваш 'vtext' на' ... c (текст, «кто кто») – FooBar

+0

Также есть функции в других пакетах, таких как 'stringr' и' stringi', которые имеют возможность возвращая что-то иное, чем «список», например матрицу символов (если результирующие векторы имеют одинаковую длину, предположительно). У меня не было возможности потратить много времени, используя 'stringi', но, похоже, у вас есть несколько функций разделения строк, которые потенциально вам полезны (см. [См. Также раздел здесь] (http: //docs.rexamine .com/R-man/stringi/stri_split.html)) – nrussell

+1

'stringi :: stri_list2matrix' является удивительным –