练习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 |
数据要从中读取的文件的名称。表格的每一行都显示为文件的一行。如果它不包含绝对路径,则文件名是 相对于当前工作目录的 或者, |