2014-11-28 11 views
5

RozważmyDlaczego strsplit zwróci listę

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

wyjście strsplit jest lista. Pierwszym elementem listy jest wektor, który zawiera powyższe słowa.

Dlaczego funkcja zachowuje się w ten sposób? Czy istnieje przypadek, w którym zwróciłby listę zawierającą więcej niż jeden element?

I mogę uzyskać dostęp do słowa używając

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

, ale to nie ma prostszy sposób?

+5

Bo tak napisano: –

+0

To jest odpowiedź, z której każdy religijny fundamentalista byłby dumny: "ponieważ ON to uczynił". – FooBar

+1

Cóż, jeśli masz dwa elementy w "tekście", a 'strsplit' zwróciło wektor, jak byś odróżnił, które podziały pochodziły od jakiego elementu w tekście? –

Odpowiedz

9

do Twojego pierwszego pytania, jednym z powodów, które przychodzi do głowy jest tak, że można go przechowywać różne wektory wynikowych długość w tym samym obiekcie, ponieważ jest wektorowy nad 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" 

Gdyby to było zostać zwrócone jako data.frame, matrix, itp. ... zamiast list, musi być uzupełniony dodatkowymi elementami.

+3

Tak, myślałem o wektorze w 'y', a nie w' x'. Wspaniały. Ale jestem tak kuszony, aby zmienić twój "vtext" na "... c (text," who who who ") – FooBar

+0

Istnieją również funkcje w innych pakietach, takich jak' stringr' i 'stringi', które mają zdolność zwracając coś innego niż "listę", taką jak macierz znaków (pod warunkiem, że powstałe w ten sposób wektory mają taką samą długość, przypuszczalnie). Nie miałem jeszcze okazji spędzić wiele czasu używając 'stringi', ale wydaje się, że ma kilka funkcji podziału struny, które byłyby potencjalnie użyteczne dla ciebie (sprawdź [patrz także sekcja tutaj] (http: //docs.rexamine .com/R-man/stringi/stri_split.html)) – nrussell

+1

'stringi :: stri_list2matrix' jest niesamowite –

Powiązane problemy