R语言-我们的雕琢-实用技巧和理念

R 相关技巧和备忘

1

R语言使用观念和小技巧

  1. 当输入错误代码,命令行出现+符号,按esc结束,重新输入。

  2. 选中函数,点击F1回跳出帮助文件。

  3. mapping=aes,注意出现类似mapping错误的时候别忘记是aes的问题。

  4. ggplot速查表:http://rstudio.com/cheatsheets。

  5. 图形映射都有图例,也就是在aes中的变量。x,y轴可以看作的x,y的图例。

  6. 在geom中设置show.legend=F,可以去除图例。

  7. Rsrudio在当前目录打开脚本文件,可以设置目录默认切换到当前工作目录。

  8. 千万不要设置绝对路径,保证代码的可移植性。

  9. tab键的重要性。

  10. 尽量不去使用.R去写代码。使用proj或者Rmd。

  11. 面对键盘忘代码?快去封装小函数吧,轮子越多跑的越快。

2

Markdown使用

01. Markdown展示表格

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

kable(head(tab))

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

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

write.table(quote = F)

3

图形

01. 修改图例为斜体

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

修改图例为加粗斜体

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

02. 修改字体

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

loadfonts(device="win")
fonts()

####图形:保存图片

#一种方式
ggsave("tax_stack_phylumpro_sample.pdf", p, width = 10, height = 6)
#另外一种
pdf("a2_PLSDA分泌物四组出图.pdf", width = 10, height = 6)

dev.off()
#第三种
tiff(file="alpha_chao1.tif", res = 300, compression = "none", width=180,height=140,units= "mm")# res = 300分辨率,units= "mm"高度和宽度的单位

dev.off()

03. ggsave保存中文正确用法

#install.packages('Cairo')
library("Cairo")
#ggsave("geo_Fus_wilt1.pdf", p1, width = 12, height =8 )

ggsave("geo_Fus_wilt.pdf", p1, width = 12, height =8 , device = cairo_pdf, family = "Song")

04. R字体调整为新罗马字体

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

05. 人工设定颜色

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


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

06. ggplot主题修改模板

注意只有theme中的才算做主图,用于保存。

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
#保存图片过程中修改字体
ggsave(FileName2, p3, width = 12, height =8, device = cairo_pdf, family = "Times New Roman" )

07. 散点连接起来

p = p + geom_polygon()

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

1

文件处理

01. 查看目录下文件

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

02. 新建文件夹

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

2

R包

01. 第一种安装

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

02. bioconductor安装或者全能安装

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

03. gitjhub安装

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",

04. 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)

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

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

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

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

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

3

载入R包

01. 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)

02. 定期升级所有R包

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

03. 查看默认载入的包

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

04. 查看包的函数

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

05. 载入包不报warning

suppressMessages(library("vegan"))

矩阵

01. 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

02. 缺失值使用0来代替 0更换为任意值

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

03. 将一半矩阵补全

as.matrix(jaccard.dist)

04. 去除全部为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)

数据框操作

01. 数据框查看前面和末尾

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

02. 修改列名

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")

03. 修改变量类型注意曲线修改

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

04. 构建一列有规律的向量内容

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

字符串

01. 拆分字符提取一部分出来

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

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

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

03. 按照特定字符拆分字符串

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

文件导入导出

01. 导入开头为#的文件

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

02. 文件保存命令

# 保存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)

03. 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")

phyloseq

01. 合并phyloseq:默认去除为未注释的OTU

当合并ps对象时,默认会去除每个水平未能注释出来的OTU,注意默认去除了

如果不愿意去除,可以设置NArm参数为F,但是这样的haul我的堆叠柱状图代码和冲击图代码可能会因为NA值的出现而不能完整运行。目前我还没有更新设置为F时的代码跟新。

02. phyloseq时刻牢记

但凡是过滤ps文件一定要记得过滤OTU,防止全0出现

03. phyloseq错误牢记:如果注释结果一整列都是NA,出现问题tax_table 将出现错误

这种错误少见,但是出现要可以发现

#可以将最后一行任意一个元素修改为字符就行
tax_table(ps0)[1,7] = "unknow"

04. ps转化:phyloseq提取mapping文件

mapping = as.data.frame(sample_data(ps7))
table(mapping$SampleType)

05. ps转化:提取mapping文件

meta(ps)

06. phyloseq文件路径必须为英文,不可包含中文路径

07. ps转化:正确提取OTU表格1

提取phyloseq格式中otu_table 此格式为矩阵格式,转化为数据框形式非常快

a <- abundances(ps)
a = as.data.frame(a)

08. ps转化:正确提取OTU表格2

phyloseq将tax文件转化为data_frame 耗时非常大

vegan_otu <- function(physeq){
OTU <- otu_table(physeq)
if(taxa_are_rows(OTU)){
OTU <- t(OTU)
}
return(as(OTU,"matrix"))
}
otu_table = as.data.frame(t(vegan_otu(ps1)))

09. ps转化:正确提取tax注释表格

使用相似方式提取tax格式文件为数据框形式,速度将变得很快

vegan_tax <- function(physeq){
tax <- tax_table(physeq)

return(as(tax,"matrix"))
}
tax_table = as.data.frame(vegan_tax(ps))
head(tax_table)

错误牢记

01. for循环错误一定要检查这个地方

是否循环在一个区间

for (i in 1:nrow(a))

02. 正确提取行名

row,names 和 rownames的区别 写成这样是错误的:tax = taxonomy[row,names(x),],但是写成下面这样是正确的:tax = taxonomy[rownames(x),]

tax = taxonomy[rownames(x),]
head(tax)
dim(tax)
# 手动筛选显著的组
x = x[rownames(taxonomy), ]

待解决问题

1. phyloseq有一篇文章案例使用输入和输出文件相同的文件名,无法执行

是否是我哪里有错误,或者没有注意到的点??

for(i in seq_along(fnFs)) {
fastqPairedFilter(c(fnFs[[i]], fnRs[[i]]),
c(fnFs[[i]], fnRs[[i]]),
trimLeft=10, truncLen=c(245, 160),
maxN=0, maxEE=2, truncQ=2,
compress=TRUE)
}

运行错误:我于是重新构建了过滤完成后的文件路径

Error in fastqPairedFilter(c(fnFs[[i]], fnRs[[i]]), c(fnFs[[i]], fnRs[[i]]), : The output and input file names must be different.

02. 出现错误“:Error in na.fail.default(list(age = c(1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, : missing values in object

# dataMatrix$age

# dim(dataMatrix)
# length(dataMatrix$age)
# dataMatrix$GCGAGCGTTATCCGGATTTATTGGGTTTAAAGGGTGCGCAGGCGGAAGATCAAGTCAGCGGTAAAATTGAGAGGCTCAACCTCTTCGAGCCGTTGAAACTGGTTTTCTTGAGTGAGCGAGAAGTATGCGGAATGCGTGGTGTAGCGGTGAAATGCATAGATATCACGCAGAACTCCGATTGCGAAGGCAGCATACCGGCGCTCAACTGACGCTCATGCACGAAAGTGTGGGTATC
#
# dataMatrix[is.na(dataMatrix)] <- 0
#
# training$age
# dim(training)
# testing$age
# dataMatrix$age
# dataMatrix[1]

03. 样品分组文件太长了,导致提取出来数据存在NA值

library(caret)setup_example(c("phyloseq", "ggplot2", "caret", "plyr", "dplyr"))sample_data(pslog)$age2 <- cut(sample_data(ps0)$age, c(0, 100, 400))dataMatrix <- data.frame(age = sample_data(pslog)$age2, otu_table(pslog))# take 8 mice at random to be the training set, and the remaining 4 the test settrainingMice <- sample(unique(sample_data(pslog)$host_subject_id), size = 8)inTrain <- which(sample_data(ps)$host_subject_id %in% trainingMice)length(inTrain)#inTrain=inTrain[1:228]training <- dataMatrix[inTrain,]testing <- dataMatrix[-inTrain,]
##这里出现问题添加参数,na.action = na.pass,问题解决参考:https://github.com/topepo/caret/issues/479plsFit <- train(age ~ ., data = training,
method = "pls", preProc = "center")
(0)

相关推荐

  • [书籍翻译系列]数据处理必备—R安装

    书籍翻译 好的书籍是人类进步的阶梯,但有些人却找不到优秀的阶梯,为此我们开设了书籍翻译这个栏目,作为你学习之路的指路明灯:分享国内外优秀书籍,弘扬分享精神,做一个知识的传播者. 希望大家能有所收获! ...

  • R包的安装与更新

    一.R包的安装 0. 设置镜像 R和bioconductor的主服务器都在国外,设置镜像加快下载速度. ## ====修改镜像====options(repos=c(CRAN="https: ...

  • 安装GitHub的R包困难解决方案

    相信遇到这样的问题的朋友不在少数,在中国大陆做数据分析,下载软件数据文件遇到困难那是家常便饭. 比如安装GitHub的R包,因为并不是所有的R包都会被正式的发布在CRAN或者bioconductor, ...

  • KEGG数据库的rest API(附带R语言小技巧)

    发现感兴趣的KEGG ID居然不在KEGG.db包里面,比如: hsa05034 Alcoholism hsa05030 Cocaine addiction 导致下面的代码失效: library(KE ...

  • 生信技巧第3课-请你务必学好R语言

    长期更新列表: 视频讲解-R爬取生信软件列表到思维导图 本期视频,学会R语言,方便你我他~~~ 为什么需要学习R语言呢? 可能是想画一个热图 或是想做GEO芯片数据分析 也可以说是各种统计分析(比如生 ...

  • 基于R语言的shiny网页工具开发小技巧系列-08

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...

  • 基于R语言的shiny网页工具开发小技巧系列-07

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...

  • 基于R语言的shiny网页工具开发小技巧系列-06

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...

  • 基于R语言的shiny网页工具开发小技巧系列-05

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...

  • 基于R语言的shiny网页工具开发小技巧系列-04

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...

  • 基于R语言的shiny网页工具开发小技巧系列-03

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...

  • 基于R语言的shiny网页工具开发小技巧系列-02

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...