R学习笔记

导读

R语言记笔记,持续更新。

cat(out, file="taxon.nwk")  # 保存文本
save.image("test.RData")  # 保存工作环境
load("test.RData")  # 加载工作环境
options(digits = 3)  # 有效数字
options(scipen = 3)  # 科学计数 
options(scipen=200)  # 改掉Y轴自动科学计数
round( , num) # 有效数字
reshape2::melt  # 使用指定包的函数

颜色

# 渐变色,数字匹配色
color=colorRampPalette(colors = c("purple", "snow", "green"))(10)  # 渐变的10种颜色
color=colorRampPalette(colors = c("snow", "green", "red"))(3)  # 只取三种颜色,与matrix值对应
# library("RColorBrewer")
brewer.pal(12, "Set3")
# 自制color库
col_list = read.table("C:/Users/hutongyuan/Desktop/group_color.list",sep="\t", check.names=F, na.string="", stringsAsFactors=F, quote="", comment.char="")
colors = col_list$V1[1:18]
names(colors) <- sort(unique(data$variable))
  • 逻辑值
all(x)  # all()是在全部为TURE时返回T
all(df[,1] > 0.05)  # 是否全大于 0.05
all(sum == 0)  # 是否全为 0
any(x)  # any()是存在任何一个TRUE时返回TRUE
is.null(a)  # 是否为NULL
is.na(a)  # 是否为缺失值
df[is.na(df)] <- 0  # 0替换NA
anyNA(df)  # 检查表格中是否有NA,返回TRUE或者FALSE
na.omit(df)  # 剔除含NA的行
target$pectin[!is.na(target$pectin)]  # 取向量种非NA的值
length(tmp[,3][tmp[,3]!=0])  # 向量中非0值数量
  • 去重
unique(a)
a[!duplicated(a),]  # 逻辑值
df[!duplicated(df[, c(1,2)]),]  # 两列重复去重,保留第一行
  • apply
apply(data[, 2:10], 1, FUN=sum)  # 统计第二列到第10列之和,1行 2列
sapply(data[, 1], function(x, y) x*y, y=10)  # 一列返回数组
sapply(card[, 1:2], function(x, y) x*y, y=s16_num[1])  # 两列及以上返回原列名数据框
sapply(list, function(x){sample(x, round(0.2 * length(x)))})  # 随机抽取list中每个向量的20%
apply(card[, 1:2], 2, function(x, y) x*y, y=s16_num[1])  # 必须两列以上,按1行计算,按2列计算
tapply分组统计
lapply返回列表,用法类似sapply
as.data.frame(lapply(df, as.numeric))  # df所有元素转成数字列表,再转成数据框
  • 多文件操作
# 识别文件名含某字符串的文件
list.files()[grepl("nwk", list.files())]
# [1] "demo.denovo.tree.nwk"

setwd("Bin_all/Bin_prokka/prokka_out_table")
files=list.files(pattern="bin.*.gene.txt") # 读取所有文件的全名,含后缀
name=vector()
for(i in 1:length(files))
{
    name[i]=as.character(strsplit(files[i], split=".gene.txt")) # 批量提取文件名
}

ml=list() # 创建一个新列表,存放每个数据框的数据
for(i in 1:length(files))
{
    ml[[i]]=read.table(files[i], sep="\t", na.string="", stringsAsFactors=F, header=T, quote="", comment.char="") # 读取所有数据框
}
  • merge
# 有多个公共列时,需指出使用哪一列作为连接列
merge(w, q , by = intersect(names(w)[1],names(q)[1]))
# 当两个数据集连接列名称相同或不同
merge(w, q, by.x = 'name', by.y = 'name') 
# 当两个数据集连接列名称相同
merge(w, q, by = 'name') 

merge(w, q, all.x = TRUE, sort = TRUE)  # 建议使用 指定了连接列 的情况
# 多个公共列,未指定连接列
# 左连接,设置 all.x = TRUE,结果只显示数据w的列及w在q数据集中没有的列
  • 文件输出,文件、文件夹操作
pdf(paste(id[i], "circos.pdf", sep="."), width=7, height=14)   # 格式化图片输出名称
write.table(result, file=file.path(fold[i], name[j]), sep="\t", quote=F, row.names=F)  # 变量控制输出文本的路径和名称

rm(list=ls())
path = ‘J:/lab/EX29 –在R语言中进行文件(夹)操作’
setwd(path)
cat(“file A\n”, file=”A”) #创建一个文件A,文件内容是’file A’,’\n’表示换行,这是一个很好的习惯
cat(“file B\n”, file=”B”) #创建一个文件B
file.append(“A”, “B”) #将文件B的内容附到A内容的后面,注意没有空行
file.create(“A”) #创建一个文件A, 注意会覆盖原来的文件
file.append(“A”, rep(“B”, 10)) #将文件B的内容复制10便,并先后附到文件A内容后
file.show(“A”) #新开工作窗口显示文件A的内容
file.copy(“A”, “C”) #复制文件A保存为C文件,同一个文件夹
dir.create(“tmp”) #创建名为tmp的文件夹
file.copy(c(“A”, “B”), “tmp”) #将文件夹拷贝到tmp文件夹中
list.files(“tmp”) #查看文件夹tmp中的文件名
unlink(“tmp”, recursive=F) #如果文件夹tmp为空,删除文件夹tmp
unlink(“tmp”, recursive=TRUE) #删除文件夹tmp,如果其中有文件一并删除
file.remove(“A”, “B”, “C”) #移除三个文件
  • 文件读取
# read.table参数
na.string="",
na.strings="NA",
stringsAsFactors=F,
header=T, 
quote="",  # 可读空值,解决缺失元素的问题,解决存在引号的问题
comment.char=""
check.names = F
header=T, sep="\t", row.names=1, na.string="", stringsAsFactors=F, quote="", comment.char="", check.names = F
# 通配文件
microbes=list.files(pattern="*_Microbe.txt"); microbes[1] 
df = na.omit(df)  # 删除含NA的行
  • 参数传递
args = commandArgs(T)

route_file = unlist(strsplit(args[1], "/"))
route = paste(route_file[1:(length(route_file)-1)], collapse="/")
setwd(route)
file_name = route_file[length(route_file)]

# input file
data = read.table(file_name, header=T, sep="\t")

# output file
write.table(data2, file=args[2], row.names=F, quote=F, sep="\t")
write.table(data3, file=args[3], row.names=F, quote=F, sep="\t")
  • 表格处理
df[c(), ]  行名、行号挑选行
df[, c()]  列名、列号挑选列
df[, which(var1%in%var2)]  变量选列
df[which(var1%in%var2), ]  变量选行
melt(df, id.vars=c("Gene", "Bin"))  # 三维表melt
melt(df, id="Gene"))  # 二维表melt
nrow(data)  # 行数
length(data[, 1])  # 行数
length(data[1,])  # 列数
ncol(data)   # 列数
length(data)  # 列数
data[,-(length(data))]  # 删除最后一列
data[-vector,]  # 删除多行,行数vector
data[, c(-1, -2)]  # 删除多列
data[, -c(1, 2)]  # 删除多列
data[data$raw.p<=0.05, c(1,2,3,4)]  # 根据列值提取行、列
data$sum=apply(data[,2:length(data[1,])], 1, FUN=sum)  # 求和,加到列尾
df[order(row.names(df)),]  # 按行名排序
data[order(data[, 2], decreasing=T),]  # 以第二列倒序
data[order(data[, 1], data[, 2], decreasing=F),]  # 以第一列正序、第二列正序
zero = c()
for(i in 1:ncol(data))
{
    if(sum(data[,i])==0)
    {
        zero = c(zero, i)  # 记录列号
    }
}
data = data[, -c(zero)]  # 删除列和为0的列
  • 字符串处理
library("stringr")

substr("abcd", 1, 2)  # 返回“ab”,从1开始取2位
unlist(strsplit(data, "/"))  # 特殊符切割,返回数组
# grep匹配,或,返回行数
df[, -which(names(df)%in%c("z","u")]  # 删除某些列,字符法,逻辑值法
df[, -which(colnames(df)%in%c("z","u")]  # 删除某些列,字符法,逻辑值法
df[-which(rownames(df)%in%c("D45", "H49", "G33")), which(colnames(df)%in%data[,1])]
# 删除某些列、行,字符法,逻辑值法
df[, -c(1, 2, 3, 4)]  # 删除某些列,数字法
# 去除unknown,所有行
unknown = grepl("Unspecified|unclassified|metagenome", data[,1])
# 返回的时所有逻辑值
unknown = grep("Unspecified|unclassified|metagenome", data[,1])
# 仅返回满足条件的列号或行号
data = data[-unknown,]

data[, colnames(data)%in%mark[,1]]  # data中的列名出现在mark,取出
length(grep(colnames(data)[50], mark[,1], fixed=T))  # 返回1 -> 匹配成功,返回0 -> 匹配失败
library(stringr) str_split_fixed(data$col, "-", 2)  # 用特殊符,切成多列
gsub("-", "_", colnames(data))  # 把向量中所有的,中划线->下划线

strsplit(string, "_|;|/")  # 随便切,用|隔开
paste("a", "b", sep="_")  # 普通粘贴
paste(c("a", "b"), collapse="_")  # 高级粘贴
paste(unlist(strsplit(rownames(data)[i], "__|;"))[c(10, 12)], collapse="_")  # 提取细菌分类信息
str_extract("aaa29", "[0-9]+")  # 得到“29”
unlist(strsplit("aaa29", "[0-9]+"))  # 得到“aaa”
  • ggplot图形
geom_boxplot(width=0.5, outlier.colour = NA, lwd = 1)
# 去除离群点,线条粗细
geom_bar(stat = "identity", position="stack", color = 'black', width=0.5, size=1)  # 柱形图,使用提供的数值,外色,宽度,粗细
geom_col(position=position_dodge(0.75), width=0.5)
# position还可以为以下几种取值:
# fill 堆叠元素,并标准化为1;
# dodge避免重叠;position_dodge设置两柱子距离
# identity不做任何调整;
# jitter给点添加扰动避免重合;
# stack将图形元素堆叠起来。
geom_line(aes(group=id), color="gray" ,position = position_dodge(0.2)) +
geom_point(aes(fill=group, group=id), position = position_dodge(0.2)) +
# 散点结合连线,箱图中
# position_dodge, position_nudge控制同一坐标上图的位置
geom_point(pch = 21, size = 4, color = "black")  # 散点图,fill内色,color外色
coord_flip()  # 图形翻转
geom_boxplot(lwd=1)  # 箱图,箱体边框粗细
# Change point shapes and colors
ggplot(df, aes(x=wt, y=mpg, group=cyl)) +
  geom_point(aes(shape=cyl, color=cyl))  # 根据分组改变形状
geom_line(group=1/"")  # 解决不出线的问题
geom_hline(aes(yintercept=12), colour="#990000", linetype="dashed")  ## 添加水平直线
  • 因子
df$var = factor(df$var, levels=c("a", "b", "c"))  # 将某一个变量设为因子
scale_x_discrete(limits=factor(data_sort[,1]))  # ggplot参数:X轴设为因子,不排序

ggplot:坐标轴

labs(x = "CAZyme level 2", y = "Count", fill = "CAZyme", title = "HELLO")  # 标签
df$var = factor(df$var, levels=c("a", "b", "c"))  # 将某一个变量设为因子
scale_x_discrete(limits=factor(data_sort[,1]))  # X轴设为因子,不排序
scale_y_discrete(limits = factor(input$name))  # Y轴设为因子,不排序
scale_y_continuous(expand = c(0, 0))  # 去除X轴与图形间的空隙
scale_x_continuous(expand = c(0,0))  # 去掉与Y轴间隙
scale_y_continuous(limits=c(0, 115), 
    # 定义y轴范围
    expand = c(0, 0), 
    # 定义y轴外展范围,下方,上方
    breaks = c(0, 20, 40, 60, 80, 100))
    # 定义刻度
xlim(0, 50)  # X轴范围
ylim(0, 50)  # Y轴范围
scale_y_continuous(labels = scales :: percent)  # 百分比标签
scale_x_continuous(labels = scales :: percent)  # 百分比标签
scale_y_continuous(breaks = as.numeric(as.character/format(seq(0.4, 1, by=0.1))),
                   labels = scales::percent)  # 去除百分号后的.0
geom_text(aes(label = count, y = count/2), size = 5)  # 柱形图加数字
theme(axis.text.x = element_text(angle = 90, 
                                hjust = 1, vjust = 1, # 0表示左对齐,1表示右对齐
                                size = 15, 
                                face = "bold"))  # X轴文本
theme(title = element_text(size = 12))  # 标题
theme(axis.text.y = element_text(size = 12, face = "bold"))  # Y轴文本
theme(axis.title.y = element_text(size = 28, face = "bold"))  # Y轴标题
theme(axis.line = element_line(size = 1)) #  坐标线粗细
theme(axis.line.x = element_line(size = 1)) #  坐标线粗细
theme(axis.line.y = element_line(size = 1)) #  坐标线粗细
theme(axis.ticks = element_line(size = 1))  # 坐标刻度粗细
theme(axis.ticks.x = element_line(size = 1))  # 坐标刻度粗细
theme(axis.ticks.y = element_line(size = 1))  # 坐标刻度粗细
theme(panel.grid=element_blank(), 
  panel.background=element_rect(color='black', fill='transparent'))  # 去掉方格,清空背景,设置边框

ggplot: 主题和图例

labs(x="", y="Gene number", color="Group", size="Genome")  # 标题
theme(legend.position='none')  # 不加legend
theme(legend.title = element_blank(), legend.position = "bottom/top/right/none")  
# legend标题展示、位置
theme(legend.position = c(0.7, 0.1))  # legend position 位置
scale_fill_manual(  # 填充
scale_color_manual(  # 外围或点 
    #values = Palette, 
    values = c("breast_share" = "#ADD8E6", "breast_only" = "#90EE90"), 
    labels = c("Shared with Gut", "Breast Only"))  # legend颜色、标签
colours=c("#ADD8E6", "#90EE90")
names(colours) <- c("breast_share", "breast_only")  # names函数
theme(legend.title=element_text(face="bold"), 
  legend.position="bottom", legend.box="horizontal", 
  legend.text=element_text(face="italic", size=rel(0.5)),
  legend.key=element_rect(fill="transparent"))
# 图例位置、图例标题加粗、图例排版、文字斜体、大小,legend色块背景色
theme(legend.key.size=unit(2,'cm'),
  legend.key.width=unit(5,'cm'),
  legend.key=element_rect(fill="transparent"))
# legend色块尺寸,背景色
guides(color/fill= guide_legend(order=1), shape = guide_legend(order=2), size=FALSE)  # 调整legend位置,有无
guides(fill/color=guide_legend(ncol=1))  # legend列数
df$group = factor(df$group, levels=c(df$group))  # factor图例排列顺序
theme(legend.background = element_rect(color = "black", linetype = "solid", size = 1))  # legend加黑框

ggplot: 文本

geom_hline(yintercept = 0, size=0.1, linetype="dashed")  # 加横直线
geom_vline(xintercept = 0, size=0.1, linetype="dashed")  # 加竖直线
geom_text(aes(label = count, y = count/2), size = 7)  # 柱形图添加数字
ggsave(result, filename=args[2], height = 14, width = 7)  # 保存
geom_text(aes(label = Weight), vjust = 1.5, colour = "white", position = position_dodge(.9), size = 5)
# 标签函数:label设置展示标签,vjust设置标签偏移(正上负下),position设置各标签的间距
ggsave(p, filename = "p.pdf",width = 12,height = 9)  # 保存
pdf("name", height=num, width=num) dev.off()  # 保存
family="serif"  # windowsFonts()[1]
family="scans"  # windowsFonts()[2]
family="momo"  # windowsFonts()[3]
theme(text=element_text(family="serif"))  # 主题中修改字体
pdf("test.pdf", width=25, height=21)
par(family = "serif")
plot()
dev.off()
  • dcast是压扁
  • melt是拉长
library(reshape2)
data=read.table("Correlation_result.txt", sep="\t", header=T)
# microbe metabolite r_value p_value
# microbe metabolite 两两配对,平方的那种
# 转换成以microbe metabolite为横纵,value为填充的矩阵
data_r=dcast(data, microbe ~ metabolite, value.var="r_value")
data_p=dcast(data, microbe ~ metabolite, value.var="p_value")

参考:
ggplot2画图:legend整理
legend参考
COLORBREWER 2.0
ggplot2 title : main, axis and legend titles
Combine Two ggplot2 Plots from Different Data Frames in R (Example)
How To Make Grouped Boxplots with ggplot2?
R ggplot2 修改默认颜色
R|ggplot2(三)|coord 系列函数坐标轴转换
😊2020.1.15更新😊

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容