2014-09-17 4 views
1

в моих настройках у меня есть эти переменные:Извлечения элементов из вектора символов

loc <- c('anf', 'iqq', 'stg', 'ccp', 'coy', 'puq') 
subDirs <- list.dirs(full.names = FALSE) 

В текущем каталоге, откуда извлечь имена поддиректорий, у меня есть несколько подкаталогов, в которых данные I Я нахожусь заинтересованных в обработке. Но есть и другие вспомогательные каталоги, которые я не могу удалить, потому что они содержат другие важные файлы. Интересующие меня суб-dirs имеют особенность, что каждый из них начинается с «кода», который может быть либо: anf, iqq, stg, ccp, coy, puq. Поэтому я хочу извлечь имена sub-dirs, которые содержат эти коды в первых трех символах имени subdirs.

for (k in 1:length(subDirs)){ 
    if (!substr(subDirs[k], 1, 3) %in% loc & !is.na(subDirs[k])){ 
     subDirs <- subDirs[subDirs != subDirs[k]] 
    } 
} 

Например, у меня есть

[1] ""    "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results" 
[6] "anf_e1_results" "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results" 
[11] "poi_library" "stg_b2_results" "stg_e1_results" "stg_e2_results" 

Я хочу:

[1] "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results" "anf_e1_results" 
[6] "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results" "stg_b2_results" 
[11] "stg_e1_results" "stg_e2_results" 

Я сделал это для извлечения имен меня интересует, но есть лучше (эффективнее, проще) путь? У меня такое ощущение, что то, что я сделал, слишком жесткое кодирование, и мне нужен эффективный код, потому что позже будет много субдиров.

С наилучшими пожеланиями

+1

Добро пожаловать в SO. Трудно сказать, что вы делаете, без каких-либо воспроизводимых данных. Пожалуйста, прочитайте [Как спросить] (http://stackoverflow.com/help/how-to-ask) и предоставите нам способ воспроизвести то, что вы делаете. Это поможет вам получить хорошие ответы. –

+0

Тем не менее, из вашего сообщения кажется, что вы можете использовать аргумент 'pattern' с' list.files' вместо 'list.dirs' –

+0

@RichardScriven Ohh! Виноват! Я знал, что что-то пропустил, это то, что у меня есть в переменной subDirs: [1] "" "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results" [6] "anf_e1_results" "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results " [11]" poi_library "" stg_b2_results "" stg_e1_results "" stg_e2_results "Я просто хочу, что я указал в вопросе, спасибо за ваш ответ (я отредактировал вопрос) – dpalma

ответ

0

Вам не нужны никакие for петли. substr - векторный клипарт. Просто выполните:

subDirs[substr(subDirs, 1, 3) %in% loc] 
# [1] "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results" "anf_e1_results" 
# [6] "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results" "stg_b2_results" 
# [11] "stg_e1_results" "stg_e2_results" 
+0

Спасибо! он работал, не знал, что это может быть достигнуто, используя только одну линию! – dpalma

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