zl程序教程

您现在的位置是:首页 >  其他

当前栏目

2023.4生信马拉松day5-文件读写

文件 读写 生信 Day5 马拉松 2023.4
2023-06-13 09:18:39 时间

课前提示——解决问题的正确姿势

引用自 生信技能树小洁老师

本节内容大纲

引用自 生信技能树小洁老师

1.认识csv格式和分隔符

-(1)认识csv文件及其打开方式

① excel打开——csv的默认打开方式

② 记事本(txt文本阅读器)打开

③ sublime打开(适用于大文件)

④ R语言打开

#1.读取ex1.txt
ex1 <- read.table("ex1.txt")

注:文件读取是R语言里数据框的来源之一;表格文件读到R语言之后得到一个数据框,对数据框的操作和修改是不会同步到表格文件的;

-(2)分隔符

逗号、空格、制表符\t

补充知识-文件后缀:

csv文件全称是comma separated values,逗号分隔文件;

tsv文件全称是tab separated values,空格分隔文件;

但是:纯文本文件的后缀只起提示作用,只是约定俗成,不决定其具体是什么样的东西(实际输入了什么分隔符就是什么分隔符);

2.将表格文件读取到R语言里

一般用read.table()读取txt文件,用read.csv()读取表格文件;非要交叉使用的话读取文件时需要限定好参数;

读取失败的两种表现:报错/意外的结果

-(1)报错:no such file or directory

引用自 生信技能树小洁老师

原因:文件没有存放到工作目录下/有拼写错误;

解决办法:用Rproj管理项目设好工作路径;用tab键自动补齐文件名避免拼写错误。

-(2)默认参数不适用于当前读取的文件

直接读取失败就需要指定一些参数——

① header参数的指定

#1.读取ex1.txt
ex1 <- read.table("ex1.txt")    #把列名读到了第一行而没有读成列名;
ex1 <- read.table("ex1.txt",header = T)  #read.table默认header是F,不会把第一行读成列名,改成T就可以了

② 列名行名的指定,允许行名列名特殊字符

#2.读取ex2.csv
ex2 <- read.csv("ex2.csv")  #默认中-是特殊字符,所以会被R改成.
ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)  #把第一列设置为行名,不改特殊字符

③ 数据框不允许重复的行名,否则会报错;

引用自 生信技能树小洁老师

解决办法:先不加row.names参数读进来,然后处理第一列的重复值(如两列取平均、去重复),之后再将第一列设置成行名

#注意:数据框不允许重复的行名
rod = read.csv("rod.csv",row.names = 1)
rod = read.csv("rod.csv")

-(3)错误的识别——意外的结果

#3.读取soft.txt
soft <- read.table("soft.txt")    #会报错如下图所示
soft <- read.table("soft.txt",header = T,fill = T)  #填充空位,其实不对,本来是第四列没有第五列有,读成了第四列有第五列没有
soft2 <- read.table("soft.txt",header = T,sep = "\t")  #避免sep把两个制表符识别成一个,把所有看不见的东西都识别程一个制表符

3.将数据框导出成为表格文件

读取→编辑修改→导出

write.csv(test,file="example.csv")
write.table(test,file="example.txt")

注:不要覆盖原文件!要起新的名字生成新的文件——便于重复分析过程和重现分析结果;

4.R 特有的数据保存格式:R data

-(1)R语言特有的格式,只有R可以打开,无法用其他软件打开;

-(2)保存的是变量,不是表格文件;不局限于变量什么数据类型;支持多个变量存到同一个Rdata;

-(3)整存整取,不会因参数不同打开得到不同的东西;

-(4)用save()函数保存 用load()函数加载——别忘记加引号、加文件名后缀.Rdata;

save(test,file="example.Rdata")
rm(list = ls())
load("test.Rdata")  #注意没有x=
load(file = "soft.Rdata")  #把data引入环境

5.实战项目的组织方式

-(1)工作目录下分类组织

引用自 生信技能树小洁老师

注意:分类组织后,读取和保存的时候要在目标文件前加上路径,如输入文件的路径要变成"import/exp.csv",save路径也要相应改变为"export/exp.csv";

-(2)不同分析项目之间的组织

引用自 生信技能树小洁老师

组织后调用文件要注意避免写绝对路径,多写相对路径,例如访问隔壁文件夹的某个文件:

load("../隔壁文件夹/目标文件”)

练习5-1

# 1.读取complete_set.txt(已保存在工作目录)
com.set <- read.table("complete_set.txt")
com.set

# 2.查看有多少行、多少列
dim(x)
nrow(com.set)
ncol(com.set)

# 3.查看列名
colnames(com.set)

# 4.导出为csv格式
write.csv(com.set,file="com.set.csv")

# 5.保存为Rdata,再加载它
save(com.set,file = "com.set.Rdata")
rm(list = ls())
load("com.set.Rdata")
load("y.Rdata")
y
# 6.加载y.Rdata(已保存在工作目录),求gene1列的平均值
x=y[,"gene1"]
mean(x)   #运算进行不了多半是数据类型/数据结构有问题,可以class()看看
class(x)   
as.numeric(x)   #注意没有赋值就没有发生过,这一步之后class(x)会发现依然不是数值型
mean(as.numeric(x))

注意

矩阵只允许一种数据类型,要改得整个矩阵一起改(不能单独改某一列的数据类型);或者先把矩阵改成数据框再改某列;

要经常检查自己的数据;

哑巴地雷-不报错但错了的代码:

save(test,file="example.csv")

6.用于读取/导出文件的R包

如果一个数据用read.table读取有问题的话换一个函数或许会更方便,可选函数/包:

引用自 生信技能树小洁老师

应用实例:

a=data.table::fread("",data table = F)
#rio包可以方便地处理excel文件,是R语言处理excel最好的函数
library(rio)
aabb = list(a=a,b=b)
export = (aabb, "aabb.xlsx")
test = import_list ("aabb.xlsx")