R语言工作常用备忘-202107版本

目录

[toc]

R语言编程

字符串输入转化为tidyval

#----如果用字符串作为输入呢?#----------------
a = "aaa"
b = "bbb"
df <- tibble(aaa = 1:3, bbb = 3:1)
ggplot(df) +
geom_point(aes(x = !!sym(a),y = !!sym(b)))

ggplot(df) +
geom_point(aes(x = !!ensym(a),y = !!ensym(b)))

cs2 <- ensyms(x = a,y = b)
ggplot(df) +
geom_point(aes(x = !!cs2$x,y = !!cs2$y))

#--用.data[[var]]实现dplyr使用循环#--------
for (var in names(mtcars)) {
mtcars %>% count(.data[[var]]) %>% print()
}

R语言乱码

解决读入文件乱码,保存文件乱码,载入函数乱码。

read.csv(trainPath,header=TRUE,stringsAsFactors=TRUE,encoding = "UTF-8")
write.csv(outp, file = path, quote = F, fileEncoding = "UTF-8")
source("core.R",encoding="utf-8")
#下面这个函数在持续更新,有很大作用
source("G:\\Shared_Folder\\Function_local\\R_function\\Liu_project\\amplicon-master\\R\\rda-cca.R")
# env = read.csv("./env/env5change_nine.csv",row.names = 1)
env = read.delim("./env.txt",row.names = 1)

head(env)

path = "./envAndMrcrobiotaITS/"
dir.create(path)
result = RDA_CCA(ps = psIT,env = env )

#--提取图
p=result[[1]]
p

#--提取作图数据
plotdata=result[[2]]
plotdata[1:3,1:3]
# 提取带有样本标签的图形
p2=result[[3]]
p2
# 提取环境因子同群落的差异检测
table=result[[4]]
head(table)

##保存
plotnamea = paste(path,"/RDA_envnew.pdf",sep = "")
ggsave(plotnamea, p, width = 8, height = 6)
plotnamea4 = paste(path,"/RDA_envnew.jpg",sep = "")
ggsave(plotnamea4, p, width = 8, height = 6)

filenamea = paste(path,"dataplotnew.txt",sep = "")
write.table(plotdata ,file=filenamea,sep="\t",col.names=NA)

filenamea = paste(path,"aovnew.txt",sep = "")
write.table(table,file=filenamea,sep="\t",col.names=NA)

plotnamea = paste(path,"/CCA_envlabelnew.pdf",sep = "")
ggsave(plotnamea, p2, width = 18, height = 12)
plotnamea4 = paste(path,"/CCA_envlabelnew.jpg",sep = "")
ggsave(plotnamea4, p2, width = 18, height = 12)

快速应变能力是造成人与人之间差异的重要原因;

-基于有道云多平台同步数据的能力,我将R语言备忘存于次。构建于2019年2月26日。

  • 逐步更新091119

  • 逐步更新200213

  • 逐步更新20201127

统计下载NCBI文件和样本数量

fl_1 =dir("./download_amplicon_No1_1//", pattern = c("over"), full.names = TRUE, ignore.case = TRUE)

length(fl_1)

#----计算下载成功项目中的样本数量
num <- as.numeric(sapply(strsplit(fl_1, "-"), `[`, 2))
sum(num)

R包开发

# 更新帮助文档
devtools::document()
# 添加内置数据
usethis::use_data(ps)

git备忘

# https://blog.csdn.net/sgsgy5/article/details/83689516
git push -u origin master -f

扩增子数据牢记

  • 样品名称设置要求字母和数字组合,只能在多使用一个下划线。

    字母一定要开头。

    (平衡全部软件的要求);

R 语言全局使用技巧

记录当前环境和R包

查看R包版本

packageVersion("snow")

当我们需要shared我们的代码的时候就需要做这些事情。

sessionInfo()

删除R环境中的所有变量功能等

#清空内存#######
rm(list=ls())

文件和文件夹操作

修改文件名称

提取文件名称并使用正则表达式处理字符串

# 提取文件夹下的文全部件名称
fl_1 <- dir()

#这里我们提取复合要求的指定文件名称
fl_1 =dir("./", pattern = c("B|L"), full.names = TRUE, ignore.case = TRUE)

fl_2 <- as.character(fl_1)
fl_2 = gsub("-","",fl_2)

fl_2 = gsub(".R1.","_F.",fl_2)
fl_2 = gsub(".R2.","_R.",fl_2)
fl_2
file.rename(fl_1, fl_2) #函数形式为file.rename(from, to),from为原始文件名向量,to为新的文件名向量

Markdown使用

Rmarkdown使用指南

Markdown展示表格

kable函数优化R语言中的数据展示方式

kable(head(tab))

Rmarkdown分别实现横向滑块 和图片报错和警告信息处理


title: “未命名” author: “wentao” date: “2020/6/27”

output: html_document

```{css include=FALSE} pre code,pre,code { white-space:pre!important; overflow-x: scroll!important; }

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE,
fig.width = 7,
fig.height = 5,
fig.align = "center",
warning = FALSE,
message = FALSE

)

link

图形-ggplot2

设置全局主题

library(ggplot2); theme_set(theme_bw())

https://www.codenong.com/41717154/

list图形修拼图保存

library(ggpubr)
p = ggarrange(plotlist = plot, common.legend = TRUE, legend="right")
p

去除图例

p + scale_fill_discrete(guide=FALSE)

ggplot解决出图自己重叠

library(ggrepel)

p3 = p2+geom_text_repel( aes(label=points$ID),size=4)#?stat_ellipse

图形:修改图例字体

##修改图例为斜体
legend.text = element_text(size = 15,face = "italic")
#修改图例为加粗斜体
legend.text = element_text(size = 15,face = "bold.italic")

图形:修改字体

# 首次需要安装win字体并导入
#install.packages("extrafont")
# library(extrafont)
loadfonts(device="win")
fonts()

图形:保存图片的几种方式

#保存图片1
ggsave("fileame.pdf", p, width = 10, height = 6)
ggsave(FileName2, p3, width = 12, height =8, device = cairo_pdf, family = "Times New Roman" )
#保存图片2
pdf("filename.pdf", width = 10, height = 6)
dev.off()
#保存图片3
tiff(file="alpha_chao1.tif", res = 300, compression = "none", width=180,height=140,units= "mm")# res = 300分辨率,units= "mm"高度和宽度的单位

dev.off()

图形 ggsave保存中文正确用法

#install.packages('Cairo')
library("Cairo")
ggsave("geo_Fus_wilt.pdf", p1, width = 12, height =8 , device = cairo_pdf, family = "Song")

图形:R字体调整为新罗马字体

####这种方式将所有字体调整为新罗马字体####
windowsFonts(myFont = windowsFont("Times New Roman"))
p + theme_gray(base_size = 20, base_family = "myFont")

图形:人工设定颜色

这里补充一些常见的颜色,用于绘图

mi=c("#1B9E77" ,"#D95F02", "#7570B3","#E7298A")

图形:ggplot主题修改模板

注意只有theme中的才算做图形外观,用于保存。family = “Times”,这里注意不同操作系统或者平台对字体的命名不同,在这里新罗马字体被命名为Times。

p =p+theme_bw()+
theme(

panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
text=element_text(family="Times New Roman",face = "bold"),
plot.title = element_text(vjust = -8.5,hjust = 0.1),
axis.title.y =element_text(size = 20,face = "bold",colour = "black"),
axis.title.x =element_text(size = 24,face = "bold",colour = "black"),
axis.text = element_text(size = 20,face = "bold",family = "Times"),
axis.text.x = element_text(colour = "black",size = 14,family = "Times"),
axis.text.y = element_text(colour = "black",size = 14,family = "Times"),
legend.text = element_text(size = 15,face = "bold")
#legend.position = "none"#是否删除图例

)
p
#保存图片过程中修改字体

图形:散点连接起来

可以作为置信区间的一个补充

p = p + geom_polygon()

R语言文件夹和文件操作工具

文件处理:查看目录下文件

list.files(path, full.names = TRUE)

文件处理:新建文件夹

filtpath <- file.path(path, "a2_filtered")
#方便我们建立文件夹
dir.create(dirName)

R包

使用国内码云安装R包

# 国内备份EasyAovWlxPlot,码云

remotes::install_git('https://gitee.com/wentaomicro/EasyAovWlxPlot')
library("EasyAovWlxPlot")

R包:第一种安装

########安装R包的几种方式#############
# 国内用户推荐清华镜像站
site="https://mirrors.tuna.tsinghua.edu.cn/CRAN"
install.packages("DESeq2", repo=site)

R包:bioconductor安装或者全能安装

source("https://bioconductor.org/biocLite.R")
biocLite("phangorn")
##使用biocondauctor安装R包R3.5版本才可以使用
library(BiocInstaller)
biocLite("structSSI" )
library(BiocManager)
install()

R包:github安装

library("devtools")
install_github("joey711/phyloseq")
# 或者
devtools::install_github("gavinsimpson/ggvegan")
library(phyloseq)
#或者
require(devtools)
install_github("ggvegan")
#或者
if (!requireNamespace("devtools", quietly = TRUE))
install.packages("devtools")
devtools::install_github("calligross/ggthemeassist")

# 安装开发版(连github不稳定有时间下载失败,多试几次可以成功)
devtools::install_github("phyloseq", build_vignettes = TRUE)
# 安装新功能最优版
devtools::install_github("phyloseq", ref = "optimization")
install.packages("igraph")
#安装指定版本
require(devtools)
install_version("igraph", version = "0.6.5",

卸载一个R包

remove. packages(c("pkg1","pkg2") , lib = file .path("path", "to", "library"))

R包:github增强版-不记得仓库号或者安装不上

##当不记得github仓库号之后,使用下面包安装github包
install.packages('gdtools') #已发布至CRAN
library(githubinstall)
##无法下载得到github包,或者无法安装后,将github包手动下载下来,解压之后定位文件夹名称后安装
install.packages("C:/Users/wentao/Desktop/hrbrthemes-master/", repos = NULL, type = "source")
library(hrbrthemes)
install.packages("C:/Users/wentao/Desktop/microbiomeutilities-master/", repos = NULL, type = "source")
library(microbiomeutilities)

可将R包的.proj文件打开然后点击building即可安装

但是有的R包没有.proj文件。就不能使用这种方法了。

R包:安装R包无法访问系统library文件夹

我们使用win10安装R包,往往会有两个安装地址,因为R无权限访问C:/Program Files/R/R-3.5.1/library,所以大部分R包都被安装到了document文件夹中了,我们应该设置权限的,这样R包就被安装到了统一文件夹中。

win10 修改文件夹全向为全部user,位置在文件夹鼠标右键属性中。这样一来我们就可以减少许多由于文件夹权限的问题。

R包:你的R包到底安装到哪里了?

### 查看包的安装地址
.libPaths()#查看包的加载地址
.libPaths("C:/Program Files/R/R-3.5.1/library")#修改到你包的安装地址

载入R包

R包:R语言载入包方式(require)实现多个包一起载入

##将包分为两个类型载入
.cran_packages <- c("ggplot2", "gridExtra")
.bioc_packages <- c("dada2", "msa", "phyloseq")
# Load packages into session
sapply(c(.cran_packages, .bioc_packages), require, character.only = TRUE)

### 或者

pkgs <- c("phyloseq", "structSSI", "dplyr", "reshape2",
"ggplot2", "DESeq2")
sapply(pkgs, require, character = TRUE)

R包:定期升级所有R包

#######定期升级所有R##########
update.packages( )

R包:查看默认载入的包

####查看默认载入的包########
getOption("defaultPackages")#:查看启动R时自动载入的包。
####查看默认载入的包########

R包:查看包的函数

#############查看包的函数#
help(package = 'mypackage')#:查看'mypackage’的帮助
#############查看包的函数#

===

矩阵

矩阵:OTU表格按照不同丰度进行分类

矩阵分为四类

a[a>= 0.01] = 1
a[a<= 0.01& a> 0.001] = 0.6
a[a<= 0.001& a> 0.0001] = 0.3
a[a<0.0001] = 0

矩阵:缺失值使用0来代替 0更换为任意值

#缺失值使用0来代替
count[is.na(count)] <- 0
#将数据框中的0更换为任意值
a[a==0] <- 0.001

数据框操作

数据框:数据框查看前面和末尾

#数据框查看前面和末尾
head(wild)
tail(wild)

将矩阵修改为列表

#--矩阵边列表
tdf = mat_df(mm)
tdf

数据框:修改列名

colnames(otu_table1) =c("compound",colnames(otu_table1)[2:9])
colnames(tax) =c(colnames(tax)[1:2],"kingdom",
"phylum","class","order","family","genus","species","id")

数据框:修改便变量类型注意曲线修改

cs = as.character(Taxonomies$Phylum)
cs1 = as.factor(cs)

数据框:构建一列有规律的向量内容

#构建一列向量命令集合
fengdu$breaks = rep(1:65, 12)
# 字母开头,数字结尾
row.names(count) = paste("RE", 1:635, sep = "")

字符串

以向量方式合并字符串

paste(letters[1:6],collapse=",")

字符串:拆分字符提取一部分出来

result <- substring(colnames(bray_curtis), 1, 10)
print(result)
colnames(bray_curtis) = result

提取当前路径添加子文件夹

##提取当前路径
path = getwd();path
## 添加子文件夹路径
path0 <- file.path(path, "a0_rawdata");path0
##在path路径下新建一个子文件夹
dir.create(path0)
##切换路径
setwd(path)

按照特定字符拆分字符串

#basename提取路径下的文件名, strsplit使用制定分隔符拆分字符串,sapply提取制定字符串
sample.names <- sapply(strsplit(basename(fnFs), ".R1."), `[`, 1)
sample.names

文件导入导出

输入输出:导入开头为#的文件

读入excel文件

library("readxl")
my_data <- read_excel()

表格输出:输出字符串不带引号

在输出中添加参数quote = F即可输出为不加引号的字符串。

write.table(quote = F)#R语言中处理文件中注释符号#可用
tax = read.table("Classifier_of_16sgg.txt",sep="\t",row.names = 1,header = T,comment.char="") ;head(tax,3)

你一定遇到过-符号被读为.的情况

其实不仅仅是-还有许多R语言会check的符号都被读错,如果不添加check.names =  F 参数,你的数据就会读成这样.  。

#默认check.names = F
read.delim

#默认check.names = T
read.table
read.csv

这里有推送对这个情况做详细说明

输入输出:文件保存命令

# 保存txt
write.table(Root_exudates,"RET_a2_only_compounds.txt",row.names = T,
col.names = T,sep = "\t")
#开头空一格字符保存
write.table("\t", "otu差异统计表格BNC8_BNC5_DESeq2.txt",append = F, quote = F, eol = "", row.names = F, col.names = F)
# 保存统计结果,有waring正常
write.table(index, "otu差异统计表格BNC8_BNC5_DESeq2.txt", append = T, quote = F, sep="\t", eol = "\n", na = "NA", dec = ".", row.names = T, col.names = T)
###文件保存处理开头第一行错位col.names = NA
write.table(as.matrix(jaccard.dist), file = "jaccard.txt", sep="\t", col.names = NA)

输入输出:R环境保存和读取

save(ps2, file = "D:/Shared_Folder/my_R_packages/easy_microbiome/easyMicrobiome/data/ps2.rda")
save(ps1, file = "D:/Shared_Folder/my_R_packages/easy_microbiome/easyMicrobiome/data/ps1.rda")

load("D:/Shared_Folder/my_R_packages/easy_microbiome/easyMicrobiome/data/ps2.rda")

矩阵:将一半矩阵补全

as.matrix(jaccard.dist)

矩阵:去除全部为0的列

n=ncol(count)
#增加一行,为整列的均值,计算每一列的均值,2就是表示列
count[n+1]=apply(count[c(1:nrow(count)),],1,sum)
#选择sumsqs大于5的otu
count=count[count[n+1] > 0,1:n]
head(count)
dim(count)

载入包不报warming

suppressMessages(library("vegan"))

phyloseq

如何向phyloseq对象中添加一个树

# tree = read.tree("./data/Big_data_rhi_ITS/bulk/otus.tree")
# tree
# # #--发现序列名字不同
# phy_tree(psITS) = tree
# saveRDS(psITS,"./data/Big_data_rhi_ITS/bulk/ps_final_model.rds")

R语言如何导入fa文件和输出fa文件

library(Biostrings)
rep = readDNAStringSet("./data/Big_data_rhi_ITS/sh_refs_qiime_ver7_97_s_01.12.2017_dev.fasta")

ps = phyloseq(
otu_table(psITS),
tax_table(psITS),
refseq(rep)
)
ps

library(seqinr)

fa <- refseq(ps)
writeXStringSet(fa,"./data/Big_data_rhi_ITS/bulk/repset.fa")

如何构建一个phyloseq对象

library(phyloseq)
library(ggClusterNet)
library(tidyverse)

metadata = read.delim("https://raw.githubusercontent.com/taowenmicro/R-_function/main/metadata.tsv",row.names = 1)
otutab = read.delim("https://raw.githubusercontent.com/taowenmicro/R-_function/main/otutab.txt", row.names=1)
taxonomy = read.table("https://raw.githubusercontent.com/taowenmicro/R-_function/main/taxonomy.txt", row.names=1)
tree = read_tree("https://raw.githubusercontent.com/taowenmicro/R-_function/main/otus.tree")
library(Biostrings)
rep = readDNAStringSet("https://raw.githubusercontent.com/taowenmicro/R-_function/main/otus.fa")

ps = phyloseq(sample_data(metadata),
otu_table(as.matrix(otutab), taxa_are_rows=TRUE),
tax_table(as.matrix(taxonomy)), phy_tree(tree),refseq(rep)
)

一切phylosq对象关于微生物生态的命令都记录在这个地方。

微生物组数据标准化一个函数解决

ps_scale = scale_micro(ps = ps,method = "rela")# rela, sampling, log,TMM,RLE,upperquartile

提取相对丰度最高的多少个OTU

ps_sub = filter_OTU_ps(ps = ps,Top = 100)

按照门类合并数据

# #--门水平合并
# rank_names(ps)
# psP <- tax_glom_wt(ps = ps,ranks = "Phylum")
# psC <- tax_glom_wt(ps = ps,ranks = "Class")
# psO <- tax_glom_wt(ps = ps,ranks = "Order")
# psF <- tax_glom_wt(ps = ps,ranks = "Family")
# psG <- tax_glom_wt(ps = ps,ranks = "Genus")

phyloseq对象取子集(样品过滤)

###导入原始ps文件
ps = readRDS("./a3_DADA2_table/ps.rds")

##选择count数量大于2000的样品,也就是说将序列数量过少的样品去除,一般不操作,我们肯定弄好才分析。
# ps1 <- prune_samples(sample_sums(ps1) >=2000,ps1);ps0

sample_data(ps)
##method1 phyloseq文件根据sample_data取子集,注意取子集一定要去却一些这些样品中没有的otu
ps_sub <- subset_samples(ps,SampleType %in% c("OF"));ps_sub
ps_sub <- subset_samples(ps,ID %in% c("SRR8247296"));ps_sub
ps_sub = filter_taxa(ps_sub, function(x) sum(x ) > 1 , TRUE);ps_sub #筛选序列数量大于1的

#method2
design = as.data.frame(sample_data(ps))
map1<-design[grep("SRR8247296",row.names(design)),]
ps_sub <- subset_samples(ps,ID %in% map1$ID)
ps_sub = filter_taxa(ps_sub, function(x) sum(x ) > 1 , TRUE)#筛选序列数量大于1的
ps_sub
#是否需要保存

# saveRDS(ps_sub,"./ps_sub.rds")

(0)

相关推荐