2014-02-20 7 views
0

У меня есть список с 21 символьной строкой, называемой «r1score.list». Я сделал этот список, прочитав текстовые файлы из папки. Затем я сделал каждый txt в кадре данных и поместил их в другой список под названием «r1.score». (Вы можете игнорировать функцию (x) {sortertoDF (x)}, потому что я вызываю функцию, которую я написал где-то еще, чтобы манипулировать данными).Именование элементов в списке в r

r1score.list <- dir(pattern="*.txt") 

> r1score.list 
[1] "p01_control.txt" "p02_control.txt" "p03_control.txt" "p04_pq.txt"   "p05_pq.txt"  "p06_pq.txt"  
[7] "p07_doce.txt"  "p08_doce.txt"  "p09_doce.txt"  "p10_dact.txt"  "p11_dact.txt"  "p12_dact.txt"  
[13] "p16_carm.txt"  "p17_carm.txt"  "p18_carm.txt"  "p19_cisplatin.txt" "p20_cisplatin.txt" "p21_cisplatin.txt" 
[19] "p22_amsacrine.txt" "p23_amsacrine.txt" "p24_amsacrine.txt" 

r1.score <- llply(.data=r1score.list, .fun=function(x){sortertoDF(x)}) 

Прямо сейчас, я назвал каждый кадр данных в r1.score, делая это:

names(r1.score) <- r1score.list 

Но я хочу, чтобы назвать каждый кадр данных, только слово, которое приходит после подчеркивания. Смысл, если я вызову первый фрейм данных в r1.score, я хочу, чтобы у него было имя «control». Если я буду называть четвертый фрейм данных, я хочу, чтобы у него было имя «pq». Если я вызову последний кадр данных, я хочу, чтобы у него было имя «amsacrine» и т. Д. И т. Д. Я не хочу проходить через 21 txt-файл и давать им новые имена, чтобы я мог это сделать. Есть ли более простой способ?

спасибо.

+0

Ваш список выглядит как вектор символов, а не список, как он определен в R ... –

+0

Просьба указать в качестве символьного вектора не список - довольно запутанный. – Bonono

ответ

3

Это легко сделать с помощью регулярных выражений (напуганный шаблон, который является первым аргументом sub):

names(r1.score) <- sub(".*_(.*)\\..*", "\\1", r1score.list) 

Вторым аргументом является то, что мы заменяем значение, совпавшие с регулярным выражением. В этом случае это специальный символ \\1, который является ссылкой на часть шаблона, согласованную внутри круглых скобок, (.*). Если вы посмотрите внимательно, вы увидите, что перед скобкой мы сопоставляем .*_, что означает «что-либо, заканчивающееся на символ подчеркивания», а с другой стороны мы сопоставляем \\..*, что означает что-либо, начиная с периода (нам нужно использовать \\., потому что иначе период рассматривается как дикая карта).

+0

+1 здесь мой: 'gsub (" (^. * \\ _) (. +) (\\ .. * $) "," \\ 2 ", r1score.list, perl = TRUE)' :) –

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