目的是想获取文件第二行数据,然后找出字符串长度。
数据特点是每两行一个数据单元。偶数行为我所想得到的数据。代码如下
rm(list = ls()) #清空环境变量
#加载所需要使用的包
library(seqinr)
library(xlsx)
设定工作目录
setwd("D:/BaiduNetdiskDownload/OEdata")
#读入数据
od_data=readLines("ATCACG.fa") #采用按行读取所有数据
need<-c() #建立空向量准备提取,一定要事先申明,不然找不到对
for(i in 1:length(od_data)){
if(i %% 2 ==0){
need=append(need,od_data[i])
}
}
#将list转化为data.frame
df_need=data.frame(need)
df_need$length=NA #数据框中另取一列
df_need$length=nchar(need) #获得字符串长度
#输出部分结果文件
write.table(df_need,"OD_data_length.xls",quote=FALSE, sep="\t")
1.函数append为写入函数
2.nchar为获得字符数函数
3.使用变量是要提前声明
#后续修改
for循环太花时间,不建议使用。后来改用readDNAStringSet读入fa文件,修改的代码如下
rm(list=ls())
library(Biostrings)
setwd("D:/LQ/免疫/OEdata")
#读入文件,fasta文件处理
od_data_1<-readDNAStringSet("ATCACG.fa")
seq_name = names(od_data_1)
sequence = paste(od_data_1)
df_od_data_1 <- data.frame(seq_name, sequence,stringsAsFactors=F)
df_od_data_1=unique(df_od_data_1)#消除重复行
#求序列长度
df_od_data_1$length=NA
sequence<-as.vector(df_od_data_1$sequence)
df_od_data_1$length=nchar(sequence)
df_od_data_1=df_od_data_1[order(df_od_data_1$length,decreasing = F),]#按序列长度大小排序,从小到大
write.table(df_od_data_1,"od_data_len.xls",quote = F,sep="\t",row.names = F)
#统计长度出现的频率
freq=table(df_od_data_1$length)
df_oe_data_len_freq=data.frame(freq)
write.table(df_oe_data_len_freq,"oe_data_len_freq.txt",quote = F,sep="\t",row.names = F)
极大地节约了运行时间,一般还是不要轻易用for循环。而且代码相对简洁很多。写完后还要好好消化一下,这里面有很多的函数和参数设置还不太熟悉
read函数的说明:https://stat.ethz.ch/R-manual/R-devel/library/utils/html/read.table.html
read.table(file,header = FALSE,sep =“”,quote =“\”'“, dec =“。”,数字= c(“allow.loss”,“warn.loss”,“no.loss”), row.names,col.names,as.is =!stringsAsFactors, na.strings =“NA”,colClasses = NA,nrows = -1, skip = 0,check.names = TRUE,fill =!blank.lines.skip, strip.white = FALSE,blank.lines.skip = TRUE, comment.char =“#”, allowEscapes = FALSE,flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding =“”,encoding =“unknown”,text,skipNul = FALSE) read.csv(file,header = TRUE,sep =“,”,quote =“\”“, dec =“。”,fill = TRUE,comment.char =“”,...) read.csv2(file,header = TRUE,sep =“;”,quote =“\”“, dec =“,”,fill = TRUE,comment.char =“”,...) read.delim(file,header = TRUE,sep =“\ t”,quote =“\”“, dec =“。”,fill = TRUE,comment.char =“”,...) read.delim2(file,header = TRUE,sep =“\ t”,quote =“\”“, dec =“,”,fill = TRUE,comment.char =“”,...)
file |
数据要从中读取的文件的名称。表格的每一行都显示为文件的一行。如果它不包含绝对路径,则文件名是 相对于当前工作目录的 或者,
|
header |
一个逻辑值,指示文件是否包含变量的名称作为其第一行。如果缺失,则根据文件格式确定该值: |
sep |
字段分隔符。文件各行的值由此字符分隔。如果分隔符的 |
quote |
引号字符集。要完全禁用引用,请使用 |
dec |
文件中用于小数点的字符。 |
numerals |
指示如何转换转换为双精度的数字会失去准确性的字符串,请参阅 |
row.names |
行名的矢量。这可以是给出实际行名的向量,也可以是给出包含行名的表的列的单个数字,也可以是给出包含行名称的表列名称的字符串。 如果有一个标题,并且第一行包含的字段数少于列数,则输入中的第一列将用于行名称。否则,如果 使用 |
col.names |
变量的可选名称的向量。默认是使用 |
as.is |
默认行为 注意:要禁止包括数字列在内的所有转换,请设置 请注意, |
na.strings |
字符串的字符向量被解释为 |
colClasses |
字符。为列所用的类的向量。如果未命名,则根据需要进行回收。如果命名,则名称与未指定的值相匹配 可能的值是 请注意, |
nrows |
整数:要读入的最大行数。忽略负值和其他无效值。 |
skip |
整数:开始读取数据前要跳过的数据文件的行数。 |
check.names |
逻辑。如果 |
fill |
逻辑。如果 |
strip.white |
逻辑。仅在 |
blank.lines.skip |
逻辑:如果 |
comment.char |
字符:长度为1的字符向量,包含单个字符或空字符串。使用 |
allowEscapes |
逻辑。如若C风格的逃逸,如 \ n处理或阅读逐字(默认值)?请注意,如果不在引号内,这些可以被解释为分隔符(但不作为注释字符)。欲了解更多详情,请参阅 |
flush |
逻辑:如果 |
stringsAsFactors |
逻辑:应该将字符向量转换为因子?请注意,这被覆盖, |
fileEncoding |
字符串:如果非空声明文件(不是连接)上使用的编码,则可以重新编码字符数据。请参阅 |
encoding |
对输入字符串进行编码。它用于标记字符串,如已知的Latin-1或UTF-8(请参阅 |
text |
字符串:如果 |
skipNul |
合乎逻辑:应该跳过nuls吗? |
逻辑错误,就是我需要读入xlsx文件,但是我用的是read.table函数,报错说
错误2:
有时候不太注意对象的性质,到底是因子,还是向量,还是矩阵。。。。。
错误3:为什么要将长度从小到大?
一是便于观察。二是下面找频数的时,table函数统计频数得出的结果是按照长度大小由小到大。所以需要将length排序,才能对应相应的频数。
#柱状图
barplot(freq,xlab="Length",ylab="Frency")
#直方图
hist(df_need$length)
练习2 使用pear拼接数据,并提取相关信息
一、Pear的使用
用法:pear <选项> 标准(强制性): -f,--forward-fastq首先要确认pear运行起来了转发配对结束的FASTQ文件。 -r,--reverse-fastq反向配对结束FASTQ文件。 -o,--output输出文件名。 可选的: -p,--p-value为统计测试指定一个p值。 如果计算 可能装配的p值超过指定的p值 那么配对结束读取将不会被组装。有效的选项 是:0.0001,0.001,0.01,0.05和1.0。设置1.0禁用 考试。(默认值:0.01) -v,--min-overlap指定最小重叠大小。 最小重叠可能是 在使用统计测试时设置为1。但是,进一步 可以将最小重叠大小限制为适当的值 减少误报汇编。(默认:10) -m,--max-assembly-length指定组装的最大可能长度 序列。将此值设置为0将禁用限制 并且组装的序列可以是任意长的。(默认:0) -n,--min-assembly-length指定组装的最小可能长度 序列。将此值设置为0将禁用限制 并且组装的序列可以是任意短的。(默认: 50) -t,--min-trim-length指定修剪低位后读取的最小长度 质量部分(见选项-q)。(默认值:1) -q,--quality-threshold指定修剪低位的质量分数阈值 高质量的阅读部分。如果两个质量得分 连续的碱基严格少于规定的数量 阈值,其余的读数将被修剪。(默认: 0) -u,--max-uncalled-base指定读取中未调用碱基的最大比例。 将该值设置为0将导致PEAR放弃所有读取 含有未呼叫的碱。另一个极端的设置是1 这导致PEAR独立处理所有读取 未呼叫的基地数量。(默认值:1) -g,--test-method指定统计测试的类型。 有两个选项 可用。(默认值:1) 1:给定允许的最小重叠,使用最高测试 OES。请注意,由于其独立性,通常会进行此测试 对于组装的读取产生的p值低于截止值, 关闭(由-p指定)。例如,将截断设置为 0.05使用这个测试,组装的阅读可能有一个 实际的p值为0.02。 2.使用接受概率(地图)。这种测试方法 计算与测试方法1相同的概率。然而,它 假定最小重叠是观察到的重叠 具有最高的OES,而不是由-v指定的那个。 因此,这不是一个有效的统计测试和 'p值'实际上是接受的最大概率 大会。尽管如此,我们在实践中观察到, 实际重叠尺寸的情况相对较小,测试 2只能稍微正确地组装更多的读取 假阳性率较高。 -e,--empirical-freqs禁用经验基准频率。(默认:使用经验 基本频率) -s,--score-method指定评分方法。 (默认:2) 1. OES用于匹配,+1用于不匹配。 2:大会评分(AS)。匹配使用+1,不匹配使用-1 乘以基本质量分数。 3:忽略质量分数,使用+1作为比赛,-1使用a 不匹配。 -b,--phred-base基本PHRED质量分数。 (默认:33) -y,--memory指定要使用的内存量。 这个数字可能是 接着是表示K,M或G的字母之一 千字节,兆字节和千兆字节。字节是 假设没有指定字母。 -c,--cap指定生成的质量分数的上限。 如果 设置为零,禁用上限。(默认:40) -j,--threads要使用的线程数 -h,--help这个帮助屏幕。
./pear -f /home/liuqian/biosoft/FastQC/data/QOE1801010TTAGGC_HKCCCCCXY_L6_1.fq -r /home/liuqian/biosoft/FastQC/data/QOE1801010TTAGGC_HKCCCCCXY_L6_2.fq -o TTAGGC
然后是必要的设置,-f 接输入文件,正链。-r 接输入文件,反链。-o 输出文件。
运行结束后会产生四个文件
二、对fastqc文件进行处理
下载安装bioconductor中的包
source("http://www.bioconductor.org/biocLite.R")#下载来源
biocLite("ShortRead")#相当于install.pages
读入fastq文件需要用到ShortRead包,这个包是bioconductor里面的。
安装过程中遇到的一个问题是有个包无法移动到指定目录,下载到临时文件夹中了,需要手动将文件移过去并解压缩,再进行安装。
运行语句如下:
library(ShortRead)
pear_assembled_1<-readFastq("D:/LQ/免疫/ATCACG.assembled.fastq",pattern = character(0))
writeFasta(readFastq("D:/LQ/免疫/","ATCACG.assembled.fastq"),"ATCACG.assembled.fa")
Usage: readFastq(dirPath, pattern=character(0), ...) ## S4 method for signature 'character' readFastq(dirPath, pattern=character(0), ..., withIds=TRUE) writeFastq(object, file, mode="w", full=FALSE, compress=TRUE, ...) Arguments:
dirPath: A character vector (or other object; see methods defined on this generic) giving the directory path (relative or absolute) or single file name of FASTQ files to be read. pattern: The (‘grep’-style) pattern describing file names to be read. The default (‘character(0)’) results in (attempted) input of all files in the directory.
可以?readFastq看一下参数.文件夹中就存在fasta文件格式了。一定要指明路径
然后按照fasta文件的处理。
#读入Pear拼接数据的fasta文件
ATCACG.assembled.fa_1<-readDNAStringSet("ATCACG.assembled.fa")
ATCACG_seq_name=names(ATCACG.assembled.fa_1)
ATCACG_sequence<-paste(ATCACG.assembled.fa_1)
df_ATCACG.assembled.fa_1<-data.frame(ATCACG_seq_name,ATCACG_sequence,stringsAsFactors=F)
得到结果