2014-09-23 2 views
7

Я сделал функцию, которая в основном выводит несколько строк длины, то есть, например,Извлечь все максимальные значения длины в векторе символов в R

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

Теперь я назначил выход функции в переменная a,

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

Класс a является символом. Теперь я хочу только те строки, которые имеют максимальную длину. Например, в этом примере максимальная длина равна «110110». Итак, я хочу этого. Я пробовал использовать команду max, но она возвращает только одну строку максимальной длины, если ее несколько. Например, в таких строках

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

Использование максимальной команды возвращает только «cab». Тем не менее, я хочу, чтобы все строки максимальной длины. Как мне это сделать?

+0

Просто позвольте мне заметить, что 'a <- c (« 110 »,« 101 »,« abc »,« cab »)' является плохим примером так как все строки имеют одинаковую длину. –

ответ

10

Чтобы измерить «длину» строки, вы должны использовать что-то вроде nchar. Если вы хотите, чтобы все элементы имели максимальное количество символов, вы можете фильтровать с помощью nchar(a)==max(nchar(a)). Следующий код должен делать то, что вы пытаетесь сделать:

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

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

Привет. Извините, но поскольку это результат функции, я это выполнил. Таким образом, в некоторых местах функция возвращает, '' '', т. Е. NULL. В этих местах в этом коде отображается предупреждающее сообщение 'In max (nchar (a)): отсутствие непустых аргументов до max; возвращение -Inf'. Как справиться с этим? – Qirohchan

+0

@ Завершить это произойдет, когда все элементы будут NULL, и это всего лишь предупреждение, вы можете игнорировать его в этих случаях, и результат будет, правильно, также NULL-вектором. –

+0

@Qin Вы также можете удалить записи нулевой длины с помощью 'nzchar'. Или в функции вы можете включить строку 'if (any (nzchar (x))) x <- x [nzchar (x)]' или что-то в этих строках. Это избавит вас от этих предупреждений, когда вы назовете 'max' –

Смежные вопросы