【发布时间】:2021-11-10 20:27:19
【问题描述】:
我想:
-
从目录中读取 *.txt 文件列表
-
对于我文件夹中的所有 .txt 文件,我想使用所有行 id=NAME 中包含的信息,这是所有 *.txt 文件中第五列的一部分(例如,Hox.txt 和锌。 txt 下)
-
使用将 id 值链接到 Family 值的单独查找表(例如,下面的查找表)确定给定文件属于哪个系列(例如 cram-2)
-
将所有具有相同系列的文件(例如 HOX.txt 和 zinc.txt)合并/连接到一个 .txt 文件中。
-
使用列 Family 的名称保存链接文件(例如 cram-2.txt)。
!!提醒 !! !! R 将不得不处理大量繁重的 .txt 文件 - 需要临时目录吗? !!
例子:
HOX.txt 文件行:
ma reg out fim id=HOX;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
se reg out fim id=HOX;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
to reg out fim id=HOX;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
pa reg out fim id=HOX;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
zinc.txt 文件行:
ma reg out fim id=zinc;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
se reg out fim id=zinc;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
to reg out fim id=zinc;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
pa reg out fim id=zinc;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
查找表:
Name Family
HOX cram-2
zinc cram-2
fire sf.xr
fire ra.XS-2
...continues...
我搜索得到的最终输出:
a) 文件名 = cram-2.txt
b) 连接 HOX.txt 和 zinc.txt,因为它们都来自 Family cram-2!
ma reg out fim id=HOX;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
se reg out fim id=HOX;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
to reg out fim id=HOX;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
pa reg out fim id=HOX;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
ma reg out fim id=zinc;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
se reg out fim id=zinc;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
to reg out fim id=zinc;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
pa reg out fim id=zinc;seq=AGCAGGAAATA;score=12.1915;pval=4.97e-05
代码只适用于少数文件。床。 我尝试使用 tempfile() 和 tempdir() 但仍然没有用。
dfNameFamily = tibble(
Name = as.character(df$Name),
Family = as.character(df$Family)
dir = "~/textfiles"
TxtFile = function(dir) dir_ls(dir, regexp = "\\.txt$")
readTxt = function(FileName){
lines = character()
if(file_exists(FileName)){
con = file(FileName, open = "r")
lines = readLines(con)
close(con)
}
lines
}
GetName = function(l) str_match(l, ";id=(.+);seq")[1,2]
SaveFile = function(l, name, dir){
con = file(paste0(dir, "/" , name))
writeLines(unlist(l$lines), con)
close(con)
}
tibble(FileName = TxtFile(dir)) %>%
mutate(
lines = map(FileName, readTxt),
Name = map_chr(lines, GetName)) %>%
left_join(dfNameFamily, by="Name") %>%
group_by(Family) %>%
group_walk(SaveFile, dir)
【问题讨论】:
-
Stackoverflow 不是雇用某人为您编写代码的网站。你需要展示你到目前为止所做的事情,人们会很高兴找到答案并解决你遇到的确切问题。您可以在此处阅读有关如何提供MCVE