2014-09-23 13 views
7

ho fatto una funzione che stampa sostanzialmente più stringhe di lunghezza, cioè, per esempio,estrarre tutti i valori massimi di lunghezza in un vettore personaggio R

"110110" "110" "101" "011" 

Ora, ho assegnato l'output della funzione in un variabile a,

a<- c("110110", "110", "101", "011") 

La classe di un esce per essere personaggio. Ora, voglio solo quelle stringhe che hanno la lunghezza massima. Ad esempio, in questo esempio, la lunghezza massima è "110110". Quindi, lo voglio. Ho provato a utilizzare il comando max, ma restituisce solo una stringa di lunghezza massima se ci sono più. Ad esempio, in stringhe come queste,

a <- c("110", "101", "abc", "cab") 

Utilizzando solo il comando max restituisce solo "cabina". Tuttavia, voglio tutte le stringhe di lunghezza massima. Come posso farlo?

+0

Lasciatemi osservare che 'a <- c (" 110 "," 101 "," abc "," cab ")' è un esempio povero come tutte le stringhe hanno la stessa lunghezza. –

risposta

10

Per misurare la "lunghezza" della stringa è necessario utilizzare qualcosa come nchar. Se vuoi tutti gli elementi che hanno il numero massimo di caratteri puoi filtrare con nchar(a)==max(nchar(a)). Il seguente codice dovrebbe fare quello che stai cercando di fare:

a <- c("110", "101", "abc", "cab") 

a[nchar(a)==max(nchar(a))] 
[1] "110" "101" "abc" "cab" 
+0

Ciao. Scusa ma, poiché è l'output di una funzione, eseguirò questo. Quindi, in alcuni punti, la funzione restituisce, "" "', cioè NULL. In quei luoghi, questo codice mostra un messaggio di avviso 'In max (nchar (a)): nessun argomento non mancante a max; ritornando -Inf'. Come affrontarli? – Qirohchan

+0

@Questo avverrà quando tutti gli elementi sono NULL ed è solo un avvertimento, puoi ignorarlo in questi casi e il risultato sarà, correttamente, anche un vettore NULL. –

+0

@Qin È anche possibile rimuovere le voci di lunghezza zero con 'nzchar'. O nella funzione potresti includere la riga 'if (any (nzchar (x))) x <- x [nzchar (x)]' o qualcosa del genere. Questo eliminerebbe quegli avvertimenti quando chiami 'max' –

Problemi correlati