2014-09-23 9 views
7

Zrobiłem funkcję, która w zasadzie wyprowadza wielu ciągów długości, czyli, na przykład,Extract wszystkie wartości maksymalne długości w postaci wektorowej w R

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

Teraz przypisane wyjście funkcji w zmienna,

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

Klasa a wychodzi na postać. Teraz chcę tylko te struny, które mają maksymalną długość. Na przykład w tym przykładzie maksymalna długość wynosi "110110". Tak więc chcę tego. Próbowałem użyć polecenia max, ale zwraca tylko jeden ciąg o maksymalnej długości, jeśli jest ich wiele. Na przykład w ciągach takich jak te,

Używanie polecenia max zwraca tylko "cab". Jednak chcę wszystkie ciągi o maksymalnej długości. Jak mogę to zrobić?

+0

Po prostu pozwól mi zauważyć, że 'a <- c (" 110 "," 101 "," abc "," cab ")' to kiepski przykład ponieważ wszystkie struny mają tę samą długość. –

Odpowiedz

10

Aby zmierzyć "długość" struny, należy użyć czegoś takiego jak nchar. Jeśli chcesz wszystkie elementy, które mają maksymalną liczbę znaków, możesz filtrować przy pomocy nchar(a)==max(nchar(a)). Poniższy kod powinien zrobić to, co próbujesz:

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

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

Witam. Przepraszam, ale ponieważ jest to wyjście funkcji, wykonam to. W niektórych miejscach funkcja zwraca '' ", tzn. NULL. W tych miejscach ten kod wyświetla komunikat ostrzegawczy 'In max (nchar (a)): nie brakujące argumenty do max; return -Inf'. Jak rozwiązać te problemy? – Qirohchan

+0

@Jeżeli tak się stanie, gdy wszystkie elementy są NULL i jest to tylko ostrzeżenie, możesz je zignorować w tych przypadkach, a wynikiem będzie, poprawnie, również wektor NULL. –

+0

@Qin Możesz również usuwać wpisy o zerowej długości za pomocą 'nzchar'. Lub w funkcji możesz zawrzeć linię 'if (any (nzchar (x))) x <- x [nzchar (x)]' lub coś wzdłuż tych linii. Pozbyłoby się tych ostrzeżeń, gdy zadzwonisz do 'max' –