Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R使用正则表达式提取文本并保存到向量。For跨多个目录循环_R_Regex_For Loop - Fatal编程技术网

R使用正则表达式提取文本并保存到向量。For跨多个目录循环

R使用正则表达式提取文本并保存到向量。For跨多个目录循环,r,regex,for-loop,R,Regex,For Loop,我有一个文件列表(result.file.names) 文件包含以下类型的文本: {u'likelihood': -40563.03277, u'ml_tree': u'(cretaceaPI631721:0.01986343369712553764,((marinaPI516711:0.00342486721337833871,marinaPI419391:0.00439557045406125009):0.02057525413645854007,(prostrataPI577445

我有一个文件列表(result.file.names)

文件包含以下类型的文本:

    {u'likelihood': -40563.03277, u'ml_tree': u'(cretaceaPI631721:0.01986343369712553764,((marinaPI516711:0.00342486721337833871,marinaPI419391:0.00439557045406125009):0.02057525413645854007,(prostrataPI577445:0.01814072969763430923,((rhodopeaW619154:0.01102506287325524803,rhodopeaSA43026:0.00988925069197059761):0.00474817094454488275,sativaglomerataPI577567:0.01961388465250675159):0.00161938724432756135):0.00384093064837489435):0.00445211181667617192,truncatulaW64996:0.03326867403662570749):0.0;', u'partitions': {u'1': {u'alpha': 0.02, u'rates': [0.669133, 3.027675, 0.703665, 0.839487, 3.419337, 1.0], u'name': u'gene6', u'frequencies': [0.292, 0.157, 0.175, 0.376]}, u'0': {u'alpha': 0.02, u'rates': [1.339908, 4.287687, 0.779025, 0.969835, 3.515225, 1.0], u'name': u'gene2', u'frequencies': [0.303, 0.164, 0.196, 0.337]}, u'3': {u'alpha': 0.02, u'rates': [0.546239, 2.327466, 0.694809, 0.626631, 2.03728, 1.0], u'name': u'gene20B', u'frequencies': [0.294, 0.165, 0.186, 0.356]}, u'2': {u'alpha': 0.02, u'rates': [0.791557, 4.292835, 0.810393, 1.104181, 2.854274, 1.0], u'name': u'gene20A', u'frequencies': [0.299, 0.171, 0.173, 0.356]}, u'5': {u'alpha': 0.02, u'rates': [0.801513, 2.664222, 0.685992, 1.465601, 3.70961, 1.0], u'name': u'gene35', u'frequencies': [0.294, 0.155, 0.189, 0.362]}, u'4': {u'alpha': 0.02, u'rates': [0.666665, 3.932293, 1.012807, 0.631296, 2.635027, 1.0], u'name': u'gene28', u'frequencies': [0.298, 0.173, 0.181, 0.348]}, u'7': {u'alpha': 0.02, u'rates': [0.834878, 3.467245, 0.990482, 1.038981, 4.405174, 1.0], u'name': u'gene44', u'frequencies': [0.284, 0.152, 0.183, 0.381]}, u'6': {u'alpha': 0.02, u'rates': [0.79724, 3.092797, 0.663377, 0.987096, 2.309744, 1.0], u'name': u'gene41', u'frequencies': [0.296, 0.166, 0.178, 0.361]}, u'9': {u'alpha': 0.02, u'rates': [0.988022, 2.859719, 0.731658, 0.978527, 3.139754, 1.0], u'name': u'gene60', u'frequencies': [0.285, 0.16, 0.182, 0.374]}, u'8': {u'alpha': 0.02, u'rates': [0.940118, 1.667166, 0.581149, 0.308618, 1.912549, 1.0], u'name': u'gene49', u'frequencies': [0.291, 0.163, 0.182, 0.365]}}}
{u'likelihood': -4216.778335, u'ml_tree': u'((cretaceaPI631721:0.02585480855056009053,(marinaPI516711:0.00302287739988804476,marinaPI419391:0.00492764788913652510):0.01886326220937559889):0.00569811409029884631,(sativaglomerataPI577567:0.02386936810593148425,((rhodopeaW619154:0.01021163111000199936,rhodopeaSA43026:0.00951101466387962655):0.01010166362035459613,prostrataPI577445:0.02085983976718608704):0.00193049473998346973):0.00244017359086532359,truncatulaW64996:0.03071445596771318898):0.0;', u'partitions': {u'0': {u'alpha': 0.02, u'rates': [1.028417, 4.306698, 1.161761, 1.016902, 3.754074, 1.0], u'name': u'gene54', u'frequencies': [0.287, 0.168, 0.193, 0.352]}}}
我想从它们中提取文本(在
{u'likelion':
之后的数字),并将每个文件中的每个命中保存在不同的向量中。 我用for循环试了一下

wd <- getwd()
dirs <- dir(wd, pattern="bootstrap[[:alnum:]]*$")

for (d in dirs){
  files <- file.path(d, paste0("results_outfile",1:11, ".txt"))
  for (f in files){
    lines <- readLines(f)
    likelihoods <- regmatches(lines, gregexpr("'likelihood':\\s*\\K[^,]+", text, perl=TRUE))
    results <- paste("results",f,sep="")
    assign(results, likelihoods)
}
}

wd您可以使用以下基于PCRE正则表达式的方法来提取
“可能性”和逗号之间的值:

lines <- readLines(textConnection("{u'likelihood': -40563.03277, u'ml_tree': u'(cretaceaPI631721:0.01986343369712553764,((marinaPI516711:0.00342486721337833871,marinaPI419391:0.00439557045406125009):0.02057525413645854007,(prostrataPI577445:0.01814072969763430923,((rhodopeaW619154:0.01102506287325524803,rhodopeaSA43026:0.00988925069197059761):0.00474817094454488275,sativaglomerataPI577567:0.01961388465250675159):0.00161938724432756135):0.00384093064837489435):0.00445211181667617192,truncatulaW64996:0.03326867403662570749):0.0;', u'partitions': {u'1': {u'alpha': 0.02, u'rates': [0.669133, 3.027675, 0.703665, 0.839487, 3.419337, 1.0], u'name': u'gene6', u'frequencies': [0.292, 0.157, 0.175, 0.376]}, u'0': {u'alpha': 0.02, u'rates': [1.339908, 4.287687, 0.779025, 0.969835, 3.515225, 1.0], u'name': u'gene2', u'frequencies': [0.303, 0.164, 0.196, 0.337]}, u'3': {u'alpha': 0.02, u'rates': [0.546239, 2.327466, 0.694809, 0.626631, 2.03728, 1.0], u'name': u'gene20B', u'frequencies': [0.294, 0.165, 0.186, 0.356]}, u'2': {u'alpha': 0.02, u'rates': [0.791557, 4.292835, 0.810393, 1.104181, 2.854274, 1.0], u'name': u'gene20A', u'frequencies': [0.299, 0.171, 0.173, 0.356]}, u'5': {u'alpha': 0.02, u'rates': [0.801513, 2.664222, 0.685992, 1.465601, 3.70961, 1.0], u'name': u'gene35', u'frequencies': [0.294, 0.155, 0.189, 0.362]}, u'4': {u'alpha': 0.02, u'rates': [0.666665, 3.932293, 1.012807, 0.631296, 2.635027, 1.0], u'name': u'gene28', u'frequencies': [0.298, 0.173, 0.181, 0.348]}, u'7': {u'alpha': 0.02, u'rates': [0.834878, 3.467245, 0.990482, 1.038981, 4.405174, 1.0], u'name': u'gene44', u'frequencies': [0.284, 0.152, 0.183, 0.381]}, u'6': {u'alpha': 0.02, u'rates': [0.79724, 3.092797, 0.663377, 0.987096, 2.309744, 1.0], u'name': u'gene41', u'frequencies': [0.296, 0.166, 0.178, 0.361]}, u'9': {u'alpha': 0.02, u'rates': [0.988022, 2.859719, 0.731658, 0.978527, 3.139754, 1.0], u'name': u'gene60', u'frequencies': [0.285, 0.16, 0.182, 0.374]}, u'8': {u'alpha': 0.02, u'rates': [0.940118, 1.667166, 0.581149, 0.308618, 1.912549, 1.0], u'name': u'gene49', u'frequencies': [0.291, 0.163, 0.182, 0.365]}}}
{u'likelihood': -4216.778335, u'ml_tree': u'((cretaceaPI631721:0.02585480855056009053,(marinaPI516711:0.00302287739988804476,marinaPI419391:0.00492764788913652510):0.01886326220937559889):0.00569811409029884631,(sativaglomerataPI577567:0.02386936810593148425,((rhodopeaW619154:0.01021163111000199936,rhodopeaSA43026:0.00951101466387962655):0.01010166362035459613,prostrataPI577445:0.02085983976718608704):0.00193049473998346973):0.00244017359086532359,truncatulaW64996:0.03071445596771318898):0.0;', u'partitions': {u'0': {u'alpha': 0.02, u'rates': [1.028417, 4.306698, 1.161761, 1.016902, 3.754074, 1.0], u'name': u'gene54', u'frequencies': [0.287, 0.168, 0.193, 0.352]}}}"))
likelihoods <- regmatches(lines, gregexpr("'likelihood':\\s*\\K[^,]+", lines, perl=TRUE))
likelihoods
## => [[1]]
##    [1] "-40563.03277"
##   
##    [[2]]
##    [1] "-4216.778335"

行您可以使用以下基于PCRE正则表达式的方法来提取
的“可能性”之间的值:
和逗号:

lines <- readLines(textConnection("{u'likelihood': -40563.03277, u'ml_tree': u'(cretaceaPI631721:0.01986343369712553764,((marinaPI516711:0.00342486721337833871,marinaPI419391:0.00439557045406125009):0.02057525413645854007,(prostrataPI577445:0.01814072969763430923,((rhodopeaW619154:0.01102506287325524803,rhodopeaSA43026:0.00988925069197059761):0.00474817094454488275,sativaglomerataPI577567:0.01961388465250675159):0.00161938724432756135):0.00384093064837489435):0.00445211181667617192,truncatulaW64996:0.03326867403662570749):0.0;', u'partitions': {u'1': {u'alpha': 0.02, u'rates': [0.669133, 3.027675, 0.703665, 0.839487, 3.419337, 1.0], u'name': u'gene6', u'frequencies': [0.292, 0.157, 0.175, 0.376]}, u'0': {u'alpha': 0.02, u'rates': [1.339908, 4.287687, 0.779025, 0.969835, 3.515225, 1.0], u'name': u'gene2', u'frequencies': [0.303, 0.164, 0.196, 0.337]}, u'3': {u'alpha': 0.02, u'rates': [0.546239, 2.327466, 0.694809, 0.626631, 2.03728, 1.0], u'name': u'gene20B', u'frequencies': [0.294, 0.165, 0.186, 0.356]}, u'2': {u'alpha': 0.02, u'rates': [0.791557, 4.292835, 0.810393, 1.104181, 2.854274, 1.0], u'name': u'gene20A', u'frequencies': [0.299, 0.171, 0.173, 0.356]}, u'5': {u'alpha': 0.02, u'rates': [0.801513, 2.664222, 0.685992, 1.465601, 3.70961, 1.0], u'name': u'gene35', u'frequencies': [0.294, 0.155, 0.189, 0.362]}, u'4': {u'alpha': 0.02, u'rates': [0.666665, 3.932293, 1.012807, 0.631296, 2.635027, 1.0], u'name': u'gene28', u'frequencies': [0.298, 0.173, 0.181, 0.348]}, u'7': {u'alpha': 0.02, u'rates': [0.834878, 3.467245, 0.990482, 1.038981, 4.405174, 1.0], u'name': u'gene44', u'frequencies': [0.284, 0.152, 0.183, 0.381]}, u'6': {u'alpha': 0.02, u'rates': [0.79724, 3.092797, 0.663377, 0.987096, 2.309744, 1.0], u'name': u'gene41', u'frequencies': [0.296, 0.166, 0.178, 0.361]}, u'9': {u'alpha': 0.02, u'rates': [0.988022, 2.859719, 0.731658, 0.978527, 3.139754, 1.0], u'name': u'gene60', u'frequencies': [0.285, 0.16, 0.182, 0.374]}, u'8': {u'alpha': 0.02, u'rates': [0.940118, 1.667166, 0.581149, 0.308618, 1.912549, 1.0], u'name': u'gene49', u'frequencies': [0.291, 0.163, 0.182, 0.365]}}}
{u'likelihood': -4216.778335, u'ml_tree': u'((cretaceaPI631721:0.02585480855056009053,(marinaPI516711:0.00302287739988804476,marinaPI419391:0.00492764788913652510):0.01886326220937559889):0.00569811409029884631,(sativaglomerataPI577567:0.02386936810593148425,((rhodopeaW619154:0.01021163111000199936,rhodopeaSA43026:0.00951101466387962655):0.01010166362035459613,prostrataPI577445:0.02085983976718608704):0.00193049473998346973):0.00244017359086532359,truncatulaW64996:0.03071445596771318898):0.0;', u'partitions': {u'0': {u'alpha': 0.02, u'rates': [1.028417, 4.306698, 1.161761, 1.016902, 3.754074, 1.0], u'name': u'gene54', u'frequencies': [0.287, 0.168, 0.193, 0.352]}}}"))
likelihoods <- regmatches(lines, gregexpr("'likelihood':\\s*\\K[^,]+", lines, perl=TRUE))
likelihoods
## => [[1]]
##    [1] "-40563.03277"
##   
##    [[2]]
##    [1] "-4216.778335"

行您可以读取文件,然后运行
regmatches(text,gregexpr('likelization':\\s*\\K[^,]+”,text,perl=TRUE))
注意您的正则表达式应该是PCRE风格:
read.pattern(result.file.names,pattern=“(?我使用了第一种方法,但给出了一个新的错误(请参见上面的编辑)现在已解决,我将“text”替换为“line”“在likelihoods中是的,它应该是
likelihoods,您可以在其中读取文件,然后运行
regmatches(text,gregexpr('likelion':\\s*\\K[^,]+,text,perl=TRUE))
注意您的正则表达式应该是PCRE-flavor:
read.pattern(result.file.names,pattern=“(?我使用了第一种方法,但出现了一个新错误(请参见上面的编辑)现在问题解决了,我用“行”代替了“文本”是的,它应该是
likelihoods