我是一名生物学家,编程知识较少。我有一系列的文件(fasta格式的文件),我需要应用一个R包。
每个文件内容如下:
FILE_1.FASTA
>>TTBK2_Hsap ,(CK1/TTBK)
MSGGGEQLDILSVGILVKERWKVLRKIGGGGFGEIYDALDMLTRENVALKVESAQQPKQVLKMEVAVLKKLQGKDHVCRFIGCGRNDRFNYVVMQLQGRNLADLRRSQSRGTFTFILE_2.FASTA
>>TTBK2_Hsap ,(CK1/TTBK)
MSGGGEQLDILSVGILVKERWKVLRKIGGGGFGEIYDALDMLTRENVALKVESAQQPKQVLKMEVAVLKKLQGKDHVCRFIGCGRNDRFNYVVMQLQGRNLADLRRSQSRGTFT这个包(R中的protr)的工作原理如下:
x = readFASTA(system.file(’protseq/P00750.fasta’, package = ’protr’))[[1]]
extractAAC(x)是否有可能为上面的行设置一个forloop来读取多个文件并在一个文件中提供输出??
如果可能的话,请给我一些想法或任何例子,可以帮助我在R.
发布于 2013-10-08 06:07:47
这样做是很有可能的。一个很好的策略是编写一个函数来封装您想要对每个FASTA文件做什么:
# fasta is a string that represents the fasta file to be read.
read_and_extract <- function(fasta){
seq <- readFASTA(fasta)[[1]]
return(extractAAC(seq))
}此包装功能将允许您读取FASTA文件和提取氨基酸组成,所有的一举。为了循环这些文件,我们需要与您的FASTA文件位于同一个目录中。
setwd("path/to/files")使用dir命令,您可以获取该目录中存在的所有文件的名称。
fasta_files <- dir(pattern = "[.]fasta$")注意,pattern参数告诉计算机只读取以".fasta“结尾的文件。
现在,我们使用vapply函数执行循环(有关详细信息,请参见下面的说明):
aa_comp <- vapply(fasta_files, read_and_extract, rep(pi, 20))这将产生一个矩阵,列是每个fasta文件,行是每个氨基酸。现在,我们可以将它保存为一个简单的csv文件:
write.csv(aa_comp, file = "amino_acid_composition.csv")vapply的详细信息
vapply函数是在R中执行for循环的一种奇特(而且速度更快)的方法--一开始它看起来有点混乱,但是如果您知道您的输出是什么的话,它会很好地工作。让我们看一下论点:
> vapply(Argument1, Argument2, Argument3)
fasta_files)read_and_extract)rep(pi, 20))最后一个论点最初是最难理解的,但它是我们预期输出的一个有代表性的向量。在这种情况下,extractAAC的文档表示它返回长度为20的数字向量,命令rep(pi, 20)告诉R重复数字pi 20次,从而给出长度为20的数字向量。
有更多的通用版本的vapply可以返回任何类型的输出。有关这些信息的详细信息,请参见help("vapply")。
发布于 2013-10-07 12:28:09
您可以像这样使用直进的for循环:
x <- list() # an empty list
for(f in yourFileList) {
x[[which(yourFileList==f)]] <- readFASTA(system.file(f,package='protr'))[[1]]
}您将在?Control下找到更多信息
发布于 2013-10-07 12:29:08
这里有两个稍微复杂的东西:一个是循环,另一个是将所有结果写入一个文件。
首先,如果您所要做的就是将所有的fasta文件合并成一个文件,那么从您的bash终端上看,它将比在R中容易得多
cat *.fasta > combined.fasta但是要回答R的问题,您的循环可能如下所示:
write("", file="combined.fasta") # make sure the file exists before appending
for (fileName in dir(pattern='.fasta')) {
x = readFASTA(system.file(fileName, package = ’protr’))[[1]]
# do stuff to x
write(x, file="combined.fasta", append=TRUE)
}https://stackoverflow.com/questions/19223440
复制相似问题