R语言学习

练习1

目的是想获取文件第二行数据,然后找出字符串长度。

R语言学习_第1张图片

数据特点是每两行一个数据单元。偶数行为我所想得到的数据。代码如下

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

数据要从中读取的文件的名称。表格的每一行都显示为文件的一行。如果它不包含绝对路径,则文件名是 对于当前工作目录的 getwd()在支持的情况下执行倾斜扩展。这可以是一个压缩文件(请参阅file)。

或者,file可以是一个可读的文本模式 连接(如果需要,将被打开以供读取,如果是这样的话close(在函数调用结束时被破坏))。(如果stdin()使用的话,线路提示可能会有些混乱,Ctrl-D在Unix和Ctrl-ZWindows 上 终止一个空行或一个EOF信号的输入,stdin()在返回之前,任何后退都会被清除。)

file也可以是完整的网址。(有关支持的URL方案,请参阅帮助中的'URL'部分 url。)

header

一个逻辑值,指示文件是否包含变量的名称作为其第一行。如果缺失,则根据文件格式确定该值:header设置为TRUE 当且仅当第一行包含的字段数少于列数时。

sep

字段分隔符。文件各行的值由此字符分隔。如果分隔符的sep = ""(缺省值read.table)是'空格',即一个或多个空格,制表符,换行符或回车符。

quote

引号字符集。要完全禁用引用,请使用quote = ""查看scan嵌入在引号中的引号的行为。引用仅作为读为字符的列来考虑,除非colClasses指定,否则它们全部 是字符。

dec

文件中用于小数点的字符。

numerals

指示如何转换转换为双精度的数字会失去准确性的字符串,请参阅type.convert可以缩写。(也适用于复数输入。)

row.names

行名的矢量。这可以是给出实际行名的向量,也可以是给出包含行名的表的列的单个数字,也可以是给出包含行名称的表列名称的字符串。

如果有一个标题,并且第一行包含的字段数少于列数,则输入中的第一列将用于行名称。否则,如果row.names缺少,则行被编号。

使用row.names = NULL强制行编号。缺少或 NULL row.names生成被认为是“自动”(并且未保留as.matrix)的行名称

col.names

变量的可选名称的向量。默认是使用"V"后跟列号。

as.is

默认行为read.table是将字符变量(未转换为逻辑,数字或复数)转换为因子。该变量as.is控制未被其他方式指定的列的转换colClasses它的值可以是逻辑的向量(如果需要,可以循环使用值),也可以是数字或字符索引的向量,用于指定哪些列不应转换为因子。

注意:要禁止包括数字列在内的所有转换,请设置colClasses = "character"

请注意,as.is每列指定(而不是每个变量),因此包括行名称列(如果有)和任何要跳过的列。

na.strings

字符串的字符向量被解释为NA值。空白字段也被认为是逻辑,整数,数字和复杂字段中的缺失值。请注意,测试发生 从输入中删除空白区域之后,所以na.strings 值可能需要预先剥离它们自己的空白区域。

colClasses

字符。为列所用的类的向量。如果未命名,则根据需要进行回收。如果命名,则名称与未指定的值相匹配NA

可能的值是NA(默认,当 type.convert时), "NULL"当柱被跳过),原子矢量类(逻辑,整数,数字,复杂,字符,生)中的一个,或"factor""Date" 或"POSIXct"否则,需要有一个as 方法(从包方法)转换"character"为指定的正式类。

请注意,colClasses每列指定(而不是每个变量),因此包含行名称列(如果有)。

nrows

整数:要读入的最大行数。忽略负值和其他无效值。

skip

整数:开始读取数据前要跳过的数据文件的行数。

check.names

逻辑。如果TRUE接下来检查数据框中变量的名称以确保它们是语法上有效的变量名称。如果有必要,他们会进行调整make.names,以确保没有重复。

fill

逻辑。如果TRUE在行长度不相等的情况下,则隐式地添加空白字段。查看具体信息'。

strip.white

逻辑。仅在sep指定使用,并且允许从未加引号的character字段中剥离前导和尾随空白numeric字段总是被剥离)。请参阅scan详细信息(包括'空白区域'的确切含义),记住列可能包含行名称。

blank.lines.skip

逻辑:如果TRUE输入中的空白行被忽略。

comment.char

字符:长度为1的字符向量,包含单个字符或空字符串。使用""到完全关闭的意见解释。

allowEscapes

逻辑。如若C风格的逃逸,如 \ n处理或阅读逐字(默认值)?请注意,如果不在引号内,这些可以被解释为分隔符(但不作为注释字符)。欲了解更多详情,请参阅scan

flush

逻辑:如果TRUEscan会读的是最后请求的字段后刷新到行的末尾。这允许在最后一场之后放置评论。

stringsAsFactors

逻辑:应该将字符向量转换为因子?请注意,这被覆盖,as.is并且 colClasses这两者都允许更好的控制。

fileEncoding

字符串:如果非空声明文件(不是连接)上使用的编码,则可以重新编码字符数据。请参阅file'R数据导入/导出手册'和'注意' 的帮助中的'编码'部分 

encoding

对输入字符串进行编码。它用于标记字符串,如已知的Latin-1或UTF-8(请参阅Encoding):它不用于重新编码输入,但允许R以其本地编码处理编码字符串(如果其中之一二)。请参阅“价值”和“注意”。

text

字符串:如果file未提供并且是,则text通过文本连接从数值中读取数据请注意,可以使用文字字符串在R代码中包含(小)数据集。

skipNul

合乎逻辑:应该跳过nuls吗?

错误1:

逻辑错误,就是我需要读入xlsx文件,但是我用的是read.table函数,报错说

appears to contain embedded nulls

这时候要用read.xlsx函数。此外要记得加载相应的包,如readlx、xlsx。

错误2:

有时候不太注意对象的性质,到底是因子,还是向量,还是矩阵。。。。。

错误3:为什么要将长度从小到大?

一是便于观察。二是下面找频数的时,table函数统计频数得出的结果是按照长度大小由小到大。所以需要将length排序,才能对应相应的频数。

#柱状图
barplot(freq,xlab="Length",ylab="Frency")
#直方图
hist(df_need$length)


练习2  使用pear拼接数据,并提取相关信息

一、Pear的使用

用法:pear <选项>
标准(强制性):
  -f,--forward-fastq 转发配对结束的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运行起来了
./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 输出文件。

运行结束后会产生四个文件

R语言学习_第2张图片

二、对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)

得到结果

R语言学习_第3张图片



你可能感兴趣的:(R语言)