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-Z

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值