在r中的列表中命名元素

时间:2014-02-20 22:36:56

标签: r list element rename

我有一个包含21个字符串的列表,名为“r1score.list”。我通过从文件夹中读取文本文件来制作此列表。然后我将每个txt放入一个数据框,并将它们放在另一个名为“r1.score”的列表中。 (你可以忽略函数(x){sortertoDF(x)},因为我正在调用一个我在其他地方编写的函数来操作数据。)

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文件并给它们新名称,以便我可以这样做。有更简单的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

使用正则表达式(sub的第一个参数的时髦模式)很容易做到这一点:

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

第二个参数是我们替换正则表达式匹配的值。在这种情况下,它是一个特殊符号\\1,它是对括号内(.*)匹配的模式部分的引用。如果你仔细观察,你可以看到在括号之前我们匹配.*_,这意味着“任何以下划线结尾的东西”,另一方面我们匹配\\..*,这意味着任何以句号开头的东西(我们需要使用\\.,否则将一段时间视为外卡。