2014-11-28 13 views
5

consideriPerché strsplit restituire un elenco

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

l'uscita di strsplit è una lista. Il primo elemento della lista è quindi un vettore, che contiene le parole sopra.

Perché la funzione si comporta in questo modo? C'è qualche caso in cui restituirebbe una lista con più di un elemento?

E posso accedere le parole usando

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

, ma non c'è un modo più semplice?

+5

Perché è così che è stato scritto –

+0

Questa è una risposta che qualsiasi fondamentalista religioso sarebbe stato orgoglioso di "perché LUI ha fatto così". – FooBar

+1

Bene se avevi due elementi in 'text', e' strsplit' ha restituito un vettore, come dovresti distinguere quali split provengono da quale elemento in 'text'? –

risposta

9

Per la prima domanda, una delle ragioni che mi viene in mente è in modo che possa mantenere diversi vettori risultato lunghezza nello stesso oggetto, dal momento che è vettorializzare oltre 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" 

Se questo dovesse essere restituito come data.frame, matrix, ecc ... invece di uno list, dovrebbe essere riempito con elementi aggiuntivi.

+3

Giusto, ho pensato a un vettore in 'y', non in' x'. Grande. Ma sono così tentato di cambiare il tuo 'vtext' in' ... c (testo, 'chi chi') – FooBar

+0

Inoltre, ci sono funzioni in altri pacchetti come 'stringr' e' stringi' che hanno la capacità di restituire qualcosa di diverso da un 'elenco', come una matrice di caratteri (a condizione che i vettori risultanti abbiano la stessa lunghezza, presumibilmente). Non ho ancora avuto la possibilità di dedicare molto tempo all'uso di 'stringi', ma sembra che ci siano molte funzioni di suddivisione delle stringhe che potrebbero essere potenzialmente utili per te (controlla anche [vedi anche la sezione qui] (http: //docs.rexamine .com/R-man/stringi/stri_split.html)) – nrussell

+1

'stringi :: stri_list2matrix' è fantastico –

Problemi correlati