R语言学习

文章目录

        • 绘图基本知识
          • 1、基本几何对象类型和映射参数
          • 2、绘图细节~标量控制
          • 3、绘图细节~文字控制
          • 4. 统计变换
          • 5. 位置调整
          • 6.坐标系
          • 7、其它
          • 8、常见绘图patterns
            • 频数分布直方图
            • 散点图——–查看两个因素之间的相关性
            • 箱线图
            • 条形图
        • 创建向量和保存向量
            • 读取和保存文件
            • 向量命名
            • 用字符向量给保存的文件命名
            • data.frame 转化为 list
            • 行名转换为一列
            • 了解向量结构
            • 获取特定向量(子集)
            • 构建向量(未整理)
            • 符号
        • 字符处理
        • 常见函数(未整理)
            • 数学运算函数
            • 运行内存
        • 常见R包
            • R包汇总
            • dplyer包处理数据和关系数据
        • 条件执行
          • 1. if-else结构
          • 2. ifelse结构
          • 3. switch结构
        • 循环
          • 1、for 循环
          • 语法`for (var in seq) statement`
          • 2、其它 for 循环模式
          • 3、while 循环体
            • 函数编写
        • 统计学

Rstudio 快捷键

快捷键 定义
shift + alt + k 查看所有快捷键
Ctrl + 1/2/3/4/5/6 切换至不同的页面
ctrl + “-” 整体页面缩小
ctrl + shift + “=” 整体页面放大

绘图基本知识

1、基本几何对象类型和映射参数
geom_point(size = 3, shape = 1, data = best_in_class) # 该函数还在了一个data,与常用的geom_point()不同
geom_bin2d() #2维热图
geom_hex() # 用六边形表示的2维热图
geom_freqpoly() # 频率多边形图,binwidth = 表示
abline(data, lm(mpg~wt)) # 添加了一条最优拟合曲线,method = "lm"
geom_boxplot() # 箱线图,类似与直方图,也是需要在x轴上分组
geom_histogram() # 只有x轴需要指定
geom_line() # 按照x坐标的大小顺序依次连接各个观测值
geom_rug()# 边际地毯图
geom_density(data, aes(x = , fill = )) # 密度曲线,是否需要有y轴
geom_text() # 文本注释
geom_violin() # 小提琴图
geom_smooth()  #
geom_vline() # 竖直线
geom_hline() #函数添加参考线
geom_vline() #函数添加参考线
geom_rect() #函数在我们感兴趣的数据点周围绘制一个矩形
geom_segment()# 函数及arrow 参数绘制箭头,指向需要关注的数据点
facet_grid(am ~ vs) # 小面化
facet_wrap() # 在一个图中,分出更多的小图,每一小图为一组,以免数据全部集合在一张图上看不出区别,常用于散点图
ggpaired(ToothGrowth, x = "supp", y = "len",
         color = "supp", line.color = "gray", line.size = 0.4,
         palette = "jco")+
  stat_compare_means(paired = TRUE) # 配对并检验
aes() # 指定每个变量扮演的角色,不在aes()内的图形属性映射,则统一为一个常数
aes(x = colname1)
aes(x = data[,1]) # x指代并不一定是列名,也可以用标量
aes(group = ) #对数据进行分组,指定分组变量,可以用于x和y轴都是连续型变量情况下对数据分组
2、绘图细节~标量控制
ggpubr::show_point_shapes()  #x
xlim(10,20) # 一个从10到20的连续型标量,也可以是一个离散型标度或者日期型标度
ylim(20,10) # 一个从20到10的反转后连续型标量
expand() #控制溢出量
scale_x_continuous(breaks = seq(15, 40, by = 5), #也可以控制离散型的结果顺序
                   limits = c(12,20) #修改纳入的定义域的大小,即对纳入统计图形的变量的取值
                   ) #修改标度
scale_y_continuous() #修改标度
scale_x_discrete() # 用于因子
scale_y_discrete() # 用于因子
scale_x_log10() # 等同于scale_x_continuous(trans = "log10")
scale_x_continuous(labels = NULL) #不显示刻度标签
scale_color_brewer(palette = "Set1") ##预先指定分得清的颜色集
scale_fill_brewer(palette = "Set1")
scale_colour_hue() #离散型的默认的配色方案
scale_color_discrete() # 用于因子
scale_colour_manual(values = c(Republican = "red", Democratic = "blue"))# 数据值和颜色间的映射,用于离散型变量,对aes(colour = 变量)中colour指定颜色
scale_color_gradient(low = "white", high = "black") #或scale_fill_gradient() # 对于连续的颜色标度,low = , high = 
scale_color_gradient2() #表示分散性的颜色标度
scale_color_viridis() #来自viridis包
scale_fill_viridis()
set_default_scale() #更改默认的标度
3、绘图细节~文字控制
text(locator(1),labels="Here") #鼠标添加文本位置
identify(swiss[,1:2],labels=rownames(swiss))
labs(x = , y = , tittle = paste("xx"), subtitle = ,caption = , colour = , fill = ) #添加标题,对于colour和fill是改变图例的名称
xlab() # x轴的标签 ,注意与labels = “” 的区别
ylab() #
rotate_x_text(angle = 45) #标签旋转角度
pch = # 形状
linetype = # 线的类型,linetype = 2,表示虚线
binwidth =  ## 直方图的宽度,连续型数据在坐标轴上的分组长度(每一组的长度)
width = # 箱线图的宽度
notch = # 表示方块图是否应为缺口
se = FALSE #置信界限被抑制/去除
geom_text()
hjust=  vjust = #用于控制标签的对齐方式,共有九种组会 
geom_label()
ggrepel::geom_label_repel()#防止重叠,size= , label.size= ,的区别
theme(legend.position = "none") #不显示图例,theme(legend.position=c(.1,.8)),分别距离左侧边缘10%和底部边缘80%的部分
theme() #可以调整字体、背景、颜色和网格线,也可以分别调节
theme_bw() #theme_xx()基本主题有8种
guides() #控制单个图例的显示

plot2 <- LabelPoints(plot = plot1, points = top10, repel = TRUE) #标记出指定点的标签
## 添加标签
 ggrepel::geom_label_repel(aes(label = seurat_clusters),  #选择显示在图内的标签
                            data = class_avg, #标签数据,该数据含有x和y轴数据,以及
                            size = 5,
                            label.size = 1,
                            segment.color = NA
  )
4. 统计变换
stat_identity() #
aes(y = ..density..) #使用统计转换生成的变量,需在两边用..
aes(x = cell_type, y = ..count..)
geom_bar( mapping = aes(x = cut, y = ..prop.., group = 1) )
5. 位置调整
position="jitter" #表示点抖防止完全重复,多用于散点图中
6.坐标系
coord_cartesian(xlim = , ylim = ) #放大图形中的某部位,但是不改变标度的定义域,与xlim(limits = ) 不相同,也与标度的转换有所不同
coord_flip() #颠倒x轴和y轴
coord_trans(x = exp_trans(10), y = exp_trans(10))
coord_equal() # 控制相同标度
7、其它
dev.new() # 打开一个空白图形窗口
dev.off()# 关闭窗口
ggsave()#保存图像fig.width、fig.height、fig.asp、out.width 和out.height
save(p, file = "plot.Rdata") # 保存图形对象,这种方式使之可以再次更改,需要加file = 
load("plot.rdata") # 加载图形,以再次修改
8、常见绘图patterns
频数分布直方图
## 绘制频数直方图,观察观察数据特点,是否为直方图
MyHistogram <- function(data, #数据集
                        argu1,## 映射x轴
                        binwidth  ##设置组距
                        ){ggplot(data = data)+
    geom_histogram(aes(x = data[,which(colnames(mx) == argu1) ### 获取目标列名的标量
    ] ),
    binwidth = binwidth, ## 设置组距 
    alpha = 0.9, fill = "#69b3a2"
    )  +
    labs( x = paste0(argu1," expression (FPKM)")) +
    theme(panel.grid =element_blank())+   # 去除网格
    theme(panel.border = element_blank(),
          panel.background = element_blank()) +   ## 删去外层边框
    theme(axis.line = element_line(size=1, colour = "black"))  #绘画x和y轴
}
MyHistogram(mx,"HMGCR", 0.5)
MyHistogram(mx,"EZH2", 0.2)
MyHistogram(mx,"DNMT1", 0.2)
MyHistogram(mx,"IFNG", 0.05)
ggsave("dd.png")


### 编写函数
myHistrogram <- function(data1,argu1){  # argu1 为标量
  ggplot(data1) +
    geom_histogram(aes(x = data1[,argu1]))
}
###
MyHistogram <- function(data, #数据集
                        argu1,## 映射x轴
                        binwidth  ##设置组距
                        ){ggplot(data = data)+
    geom_histogram(aes(x = data[,which(colnames(mx) == argu1) ### 获取目标列名的标量
    ] ),
    binwidth = binwidth, ## 设置组距 
    alpha = 0.9, fill = "#69b3a2"
    )  +
    labs( x = argu1)
}
散点图——–查看两个因素之间的相关性
### 散点图-----------
ggplot(data = mx,mapping = aes( x = HMGCR, y = DNMT1))  +
  geom_point(shape = 21,position="jitter") +
  geom_smooth()+ 
  theme(panel.grid =element_blank())+   # 去除网格
  theme(panel.border = element_blank(),
        panel.background = element_blank()) +   ## 删去外层边框
  theme(axis.line = element_line(size=1, colour = "black"))  #绘画x和y轴
   

## 编写散点图函数
MyPoint <- function(data, # 数据集
                    argu1, #映射x轴
                    argu2  #映射y轴
                    ){
  ggplot(data = data,mapping = aes( x = data[,argu1], y = data[,argu2]))  +
    geom_point(shape = 21,position="jitter") +
    geom_smooth(method="lm", ## 拟合方法,默认的是
                se = FALSE) +
    labs(x = paste0(argu1," expression (FPKM)"), 
         y = paste0(argu2," expression (FPKM)")) +
    theme(panel.grid =element_blank())+   # 去除网格
    theme(panel.border = element_blank(),
          panel.background = element_blank()) +   ## 删去外层边框
    theme(axis.line = element_line(size=1, colour = "black")) +  #绘画x和y轴
  ggpubr::stat_cor(method = "pearson" #
                   )  ## 求相关系数和p值
}
MyPoint(mx, "HMGCR", "DNMT1")
MyPoint(mx, "HMGCR", "EZH2")
MyPoint(mx, "DNMT1", "EZH2")
MyPoint(mx, "EZH2", "DNMT1")
MyPoint(mx, "HMGCR", "IFNG")
MyPoint(mx, "IFNG", "EZH2")
MyPoint(mx, "IFNG", "DNMT1")
ggsave("dd.png")

箱线图
### 按组别观察,绘制箱线图

ggplot(data = mx, mapping = aes(x = mx[,"group"], y = mx[,"EZH2"])) +
  geom_boxplot(aes(color = mx[,"group"])) +
  labs(x = paste0("group"," by HMGCR expression"), 
       y = paste0("EZH2"," expression (FPKM)"),
       color = paste0("group")) +
  theme(panel.grid =element_blank())+   # 去除网格
  theme(panel.border = element_blank(),
        panel.background = element_blank()) +   ## 删去外层边框
  theme(axis.line = element_line(size=1, colour = "black")) +  #绘画x和y轴
  stat_compare_means(method = "wilcox.test" #默认的统计检验方法为"wilcox.test",也可以用”t.test"
  )


## 编写箱线图函数
MyBoxplot <- function(data,  #数据集
                    argu1, #映射x轴,为分组信息,类别数据,通常写出“group”
                    argu2, #映射y轴
                    argu3  #指定统计检验方法,如"wilcox.test"
){
  ggplot(data = data, mapping = aes(x = data[,argu1], y = data[, argu2])) +
    geom_boxplot(aes(color = data[,argu1])) +
    labs(x = paste0(argu1," by HMGCR expression"), 
         y = paste0(argu2," expression (FPKM)"),
         color = paste0(argu1)) +
    theme(panel.grid =element_blank())+   # 去除网格
    theme(panel.border = element_blank(),
          panel.background = element_blank()) +   ## 删去外层边框
    theme(axis.line = element_line(size=1, colour = "black")) +  #绘画x和y轴
    stat_compare_means(method = argu3 #默认的统计检验方法为"wilcox.test",也可以用”t.test"
    ) 
}
MyBoxplot(mx,"group","EZH2","wilcox.test")
MyBoxplot(mx,"group","EZH2","t.test")
MyBoxplot(mx,"group","DNMT1","wilcox.test")
MyBoxplot(mx,"group","DNMT1","t.test")
MyBoxplot(mx,"group","IFNG","wilcox.test")
MyBoxplot(mx,"group","IFNG","t.test")
ggsave("ddd.png")


### 两组之间比较
### 按组别观察,绘制箱线图

ggplot(data = mx, mapping = aes(x = mx[,"group"], y = mx[,"EZH2"])) +
  geom_boxplot(aes(color = mx[,"group"])) +
  labs(x = paste0("group"," by HMGCR expression"), 
       y = paste0("EZH2"," expression (FPKM)"),
       color = paste0("group")) +
  stat_compare_means(method = "wilcox.test" #默认的统计检验方法为"wilcox.test",也可以用”t.test"
  )


## 编写箱线图函数
MyBoxplot <- function(data,  #数据集
                    argu1, #映射x轴,为分组信息,类别数据,通常写出“group”
                    argu2, #映射y轴
                    argu3  #指定统计检验方法,如"wilcox.test"
){
  ggplot(data = data, mapping = aes(x = data[,argu1], y = data[, argu2])) +
    geom_boxplot(aes(color = data[,argu1])) +
    labs(x = paste0(argu1," by HMGCR expression"), 
         y = paste0(argu2," expression (FPKM)"),
         color = paste0(argu1)) +
    stat_compare_means(method = argu3 #默认的统计检验方法为"wilcox.test",也可以用”t.test"
    ) 
}
MyBoxplot(mx,"group","EZH2","wilcox.test")
MyBoxplot(mx,"group","EZH2","t.test")
MyBoxplot(mx,"group","DNMT1","wilcox.test")
MyBoxplot(mx,"group","DNMT1","t.test")
MyBoxplot(mx,"group","IFNG","wilcox.test")
MyBoxplot(mx,"group","IFNG","t.test")
ggsave("ddd.png")

MyBoxplot(mx,"group","HMGCR","wilcox.test")
条形图
## 用条形图也可以观察因子变量的频数分布
ggplot(data = phe, mapping = aes(x = cell_type)) +
  geom_bar(aes(fill = cell_type)) +
  labs(y = "the numer of cells") +
    theme(panel.grid =element_blank())+   # 去除网格
    theme(panel.border = element_blank(),
          panel.background = element_blank()) +   ## 删去外层边框
    theme(axis.line = element_line(size=1, colour = "black")) +  #绘画x和y轴
  theme(axis.text.x = element_text(angle = 45,size = 8))+
  coord_flip()
## 编写函数
MyBar <- function(data,   #数据集
                  argu1 #映射x轴,x为无序类型数据
){
  ggplot(data = data, mapping = aes(x = data[,argu1])) +
    geom_bar(aes(fill = data[,argu1])) +
    labs(x = paste0(argu1),
         y = "the numer of cells",
         fill = paste0(argu1) ) +
    theme(panel.grid =element_blank())+   # 去除网格
    theme(panel.border = element_blank(),
          panel.background = element_blank()) +   ## 删去外层边框
    theme(axis.line = element_line(size=1, colour = "black")) +  #绘画x和y轴
    theme(axis.text.x = element_text(angle = 45,size = 8))+
    coord_flip() 
}
MyBar(phe,"cluster")
MyBar(phe,"cell_type")
ggsave("bar1.png")

### 按count大小排序
ph1 <- phe %>% 
  count(cell_type) #先获取count数据
ggplot(data = ph1, mapping = aes(x = reorder(cell_type, n), y = n)) +
  geom_bar(aes(fill = cell_type), stat = "identity") +
  labs(y = "the numer of cells") +
  theme(axis.text.x = element_text(angle = 45,size = 8))+
  coord_flip()
## 编写函数

创建向量和保存向量

读取和保存文件
{
options(stringsAsFactors = FALSE )
setwd("D:\\R_analysis\\scRNA")
library(tidyverse)
library(ggpubr)
library(nycflights13)
library(stringr)
library(forcats)
}
setwd() # 设置工作路径
gene <- read.csv("gene.csv",header = TRUE)
matrix <- read.csv("symbol.LIHC.tumor.FPKM_no1.csv", row.names = 1, header = TRUE) 

### 读取Rdata格式
load("HCC_log_tpm_expression_matrix.Rdata")

### 读取txt格式,使用read.table(),使用read.csv()读取txt会失去数据结构

###读取csv格式用read.CSV

files=dir()                             #获取目录下所有文件
files=grep("txt$", files, value=T)      #提取.txt结尾的文件
rm(object) #变量名
rm(list = ls())
options(stringsAsFactors = FALSE ) # 非自动将字符转换为因子
read.table(file.choose(),##读取文件,以弹出模式
           skip = 1,##  跳过前面行,是把需要变为列名的一行之下,如第85行变为列名,则需要编写为skip = 86) 
           row.names = 1, # 第一列为行名
           sep = "", ## 字符以空格分开
           header = TRUE # 第一行变为列名
)

### data.tableb
TestDT <- fread("test.txt", sep = "\t",header = FALSE, na.strings = "NA") 
向量命名
rename(data, colnames == colnamse2, ...) # 改变列名
colnames(rslt1) <- c("GSVA_score", "GSVA_score1")


用字符向量给保存的文件命名
d <- c("dgh","dg")
write.csv(d,file = paste0(d[1],"csv", collapse = ".")) #文件名为dgh.csv
data.frame 转化为 list

我们要实现如下转化

  • 每一列作为list的一个元素
  • 每一行作为list的一个元素
  • 对行进行分组,每一组作为list的一个元素
df <- data.frame(x=1:4,y=2:5,z=rep(1:2,2))
a <- as.list(df) # 每一列对应list的一个元素
b <- list(df) # 一整个数据框成为list的一个元素
c <- split(df, 1:4) # 每一行作为list的一个元素
d <- split(df, df$z) # 按照z列进行分组
行名转换为一列
targetedGeneName_group$patient <- row.names(targetedGeneName_group) #获取分组数据,并加入一列patient,以便后续合并



了解向量结构
head() #查看前五行
tail() #查看最后五行
str()  #
attributes()
获取特定向量(子集)
构建向量(未整理)
# 构建向量 ----

c() # 创建单个向量(仅包含一种类型的元素),若书输入了不同的元素,都会统一转换为最复杂的元素类型
dim(x) <- c(a, b, ... )# 赋予向量x的维度
matrix(data = ,nrow = ,ncol = ) #构建x行有列的矩阵
array(c(), dim = ) # 构建一个n维数组
list() # 列表,()里面还可以包含list,不会自动向量循环
geneList=list() #创建一个空的list
data.frame() # 
b <- data.frame(c(1,4,5),c("dg","dhfa", "dagj"), stringsAsFactors = T) #StringAsFactors = F, 表示不要转化为l
tibble(colnames =, colnames2 = , ....) # 用创建tibble,是数据框来的
tribble(~x,~y,~z,) #
print(data,n = 10, width = Inf) # 打印10行,所有列
rename(data, colnames == colnamse2, ...) # 改变列名
select(data, colname1, colnames2, everything()) #将一些指定的列放在前面
colnames(data_HMGCR_GROUP) <- colnames2 # 不会说把colnames(data_HMGCR_GROUP) <- 赋值给data_HMGCR_GROUP
fix(data) # 交换出互动编辑器来改动
colnames(data)=data[1,] # 第一行变成列名
rbind() # 加入一行
unite(mtcars, "vs_am", vs, am) #多列合成一列
factor(x, levels = y) #创建因子,x为需要转变为因子的向量,y为涉及好顺序的列表
as.factor() # 与上个factor的区别
readr::parse_factor() # 可以显示错误信息
intersect() #取向量之间的交集
union() # 并集
setdiff(x, y) # 找x中不同于y的元素
setequal(x, y) # 判断x与y是否相同
levels(x) <- C("A","B") # 了解x中的排序 
purrr::set_names() # 向量命名
dplyr::filter() #函数在tibble 中筛选行。
x[] # 取子集函数,x为向量,[]内可以为数值向量,逻辑向量,命名向量“”,对应高维“,”则取列
x[[]] # 只提取单个元素,在列表中用与[]区别更加重要。[]在列表中取子集的结果依然是列表,而[[]]则会从列表中删除一个层次等级.x[[1]][[1]]
data[[]][] #先在列表中取出一个向量,再次对去除的向量取一个元素
x$ # 等同于[[]]
  .$ #为在管道中取子集
  a<-c()
for(i in 1:n){
  a<-c(a,i)
} ##在向量中加入单个元素
str() # 重点关注列表结构
sort() # 对向量内的元素进行排序
attr() # 函数来读取和设置单个特性值
attributes() #函数同时查看所有特性值
stringr::str_
wrap() #函数来自动换行
writeLines() #写出字符
is.vector() #用来测试某个对象是否为原子型向量。


# as.logical()、as.integer()、as.double() 或as.character() 向量转换

# 一般可以通过比较运算符来构建逻辑向量
1:10 %% 3 == 0
c(TRUE, TRUE, FALSE, NA)
符号
# 常见符号以及意义----
c(x : y) #x到y的整数
na.rm = TRUE/FALSE #是否去除NA
# 符号
Inf #为最大值,无穷大值,或者 最靠边的值,和+Inf一样
-Inf #
\n # 手动为标签符号文本换行
"a\b" # 即a和b分为为不同行,注意加“”
# 算术运算符:+、-、*、/、^
# 模运算符:%/%(整数除法) 和 %% (求余)
# 比较运算符号> , >= , < , <=,!=, == 
# 布尔运算符:& 表示“与”、| 表示 “或”、! 表示“非”
x %in% y #x 是y 中的一个值
NA # 逻辑型
NA_integer_ # 整型
NA_real_ # 双精度型
NA_character_ # 字符型
!is.na(x) # 取向量x中所有非取石值,结果为逻辑型向量

字符处理

# 字符处理-----
starts_with("abc") #匹配以“abc”开头的名称
ends_with("xyz") #匹配以“xyz”结尾的名称。
contains("ijk") #匹配包含“ijk”的名称。
matches("(.)\\1") #选择匹配正则表达式的那些变
num_range("x", 1:3)#匹配x1、x2 和x3
# 字符串取子集,与上面的匹配不一样
str_sub(data, start, end) #,若是负数则表示从后往前数
str_to_lower() #函数将文本转换为小
str_to_upper()
str_to_title()
str_sort() 
str_order() 
str_sort(x, locale = "en") # 英语
gsub("-", "_", cell_prop[,1]) # 将字符串中的-替换为_


grep("OX",rownames(cells_AUC@assays@data$AUC),value = T)  # 返回含有“OX"d
#parse_*()函数族


\ # 想要在字符串中包含一个单引号或双引号,可以使用\ 对其进行“转义”
#\\ #如果想要在字符串中包含一个反斜杠,就需要使用两个反斜杠:\\
# writeLines() #这个打印与print()的区别,去掉字符串两边的""
#\n 换行符和制表符\t,
str_length() # 每个字符串的长度
str_c("x", "y", ....) # 组合两个或更多字符串,没有sep=等于默认没有间隔
str_c("x", "y", sep = ", ") #使用sep 参数来控制字符串间的分隔方式
str_replace_na(x) #是NA转换为"NA",即成为字符串
str_c(c("x", "y", "z"), collapse = ", ") # 将字符向量合并为字符串,可以使用collapse() 函数
str_view(x, "an")
str_view(x, ".a.") # 可以匹配任意字符(除了换行符)


常见函数(未整理)

# 常见函数以及其意义-----
names(xx) <- x # 命名,只是names(xx)的话只是展现xx的名称属性,只是敲xx的话,同时显示其名称属性(有的话)
names(xx) <- NULL #删除名称属性
identical(colnames(matrix),rownames(HCC_cell_metadata)) ##判断两个数据框的其中一个行名和令一个的列名是否
which(row.names(data3)== "NA.1") #which()查找原子向量中某些元素地标量
names() # 显示名称
typeof() # 确定向量的类型
class() # 与typeof() 有一定区别,class()是其属性,属性有三种:名称,维度,类
unclass() #查看R是如何存储因子,展现list的内容

sapply(fit, class)#返回该类每个成分的对象
unlist() #将一个向量列表转换为单个向量
purrr::flatten_dbl() # 更加严格的转换方式
length() # 确定向量的长度,对应数据框则告知列的数量,对应list则告知
ncol() # 向量的列的数量
vector(modle,lth) #向量类型,长度
seq_along() #在for循环中用到
seq(x,y, by = n) #x 与y 之间按n长度分割
cut() #函数将连续型变量转换为分类变量
dplyr::near() #容忍一些数据误差
mean(x)# 取均数
median()# 求中位数
sd()# 标准误差
IQR()# 四分位距
mad() # 绝对中位差
# 秩的度量:min(x)、quantile(x, 0.25) 和max(x)
# 定位度量:first(x)、nth(x, 2) 和last(x)
n_distinct(x) 计算出唯一值的数量
not_cancelled %>% count() # 
# 逻辑值的计数和比例:sum(x > 10) 和 mean(y == 0)
rank(desc(arr_delay)) #rank()与运算符
# cumsum()、cumprod()、 commin() 和cummax() :计算累加和、累加积、累加最小值和累加最大值的函数
# 对数函数:log(), log2() 和log10()
rep(x,n) # x重复n 次,x可以为一个元素,也可以是一种向量。each=n表示第一个元素先重复n次,再下一个
rnorm() #
sample(x, size, replace = FASLE/TRUE) #在0至x之间取size个整数
runif(n,min = x, max = y) #随机在x与y之间选举n个数
n <- sum(is.na(df)) #数据框中的缺失值数量
is.na() # 判断一个元素是否为缺失值
sum(is.na()) #判断缺失值的个数
is.finite()
is.infinite()
is.nan()



数学运算函数
apply(x, MARGIN, FUN, ...) #对数据框的全部行或列进行运算,margin = 1 表示行,margin = 2 表示列。trim=0.2 表示忽略最高和最低20%的数据
sweep() #
stack()
aggregate()
transform()
lapply() #
运行内存
pryr::object_size() # 查看占内存大小
gc() #释放内存
memory.size()
memory.limit()

常见R包

R包汇总
名称 功能
ggpubr 绘图;加入检验统计数值
dplyer包处理数据和关系数据
### dplyr包处理数据和关系数据-----
filter(data, colnames == xx, colnames == xe, ....)# 双等号(==)后面可以观测值,也可以是表达式
filter(flights, month == 11 | month == 12) ### 不能携程 month == 11 | 12
filter(flights, month %in% c(11, 12)) # 这种格式就可以不用到==
filter(flights, !(arr_delay > 120 | dep_delay > 120)) #只要函数名在表达式中即可
arrange(data, colnames, colnames2, ....) # 对数据框中的行按一定方式排序,与sort()区别是什么?
arrange(flights, desc(arr_delay)) # 在列名前加desc()则改变为降序
select(data, colnames, colnames2, ...) #在该数据框中选出指定的列成为新的数据框
select(flights, year:day) # 选择“year”和“day”之间的所有列
select(flights, -(year:day)) # 加了-表示 选择不在“year”和“day”之间的所有列(不包括“year”和“day”)
select(flights, time_hour, air_time, everything()) # 改变列的先后顺序,即air_time排列在第一列
mutate(data, new_colnames = xx, new_colnames2 = ,...) #增加新变量
transmute() # 添加新变量且只保存新变量的新数据框
min_rank(y) # 在同样的位置上标记排列顺序而已
min_rank(desc(y))
row_number(y)
dense_rank(y)
percent_rank(y)
cume_dist(y)
group_by(data, colnames =xx, colnames2 = xxx, ...) # 在数据框中按某些变量或着其组,分为组,虽没有生成新数据框,但是告诉数据框哪些行成为一组
group_by(data, colnames =xx, colnames2 = xxx, ...) %>% summarise(count = n(), colnames3 = mean(colnames3, na.rm = TRUE), colnames3 = sum(colnames3)) #先分组后在按变量对每一组的某一变量统计,na.rm = TRUE表示去除缺失值
sum(!is_na()) # 非缺失值的计数
daily %>% ungroup() #取消分组,()内什么都不用填

## 处理关系数据重要的是发现每个table中的各自主键和外键,以及是否需要代理键。留意重复键
left_join(x, y, by = "xxx") #保存x表
right_join()
full_join() # 保存x和y中的所有观测值,没有匹配则用NA填充
inner_join(x,y, by = "xx") # 内链接,得到的是一张新table
left_join(x, y, by = NULL) # 或者不填by,是自然链接,使用所有公共变量
left_join(x, y, by = c("a" = "b")) 
semi_join(x, y)# 保留x 表中与y 表中的观测相匹配的所有观测。
anti_join(x, y)# 丢弃x 表中与y 表中的观测相匹配的所有观
anti_join() #检查外键是否与另一张表的主键相匹配
intersect(x, y) # 返回既在x 表,又在y 表中的观测。
union(x, y) # 返回x 表或y 表中的唯一观测。
setdiff(x, y) # 返回在x 表,但不在y 表中的观测。



条件执行

1. if-else结构

语法:if (cond) statement

if (cond) statement1 else statement2

示例:

if (is.character(grade)) grade <- as.factor(grade) # statement是grade <- as.factor(grade)
if (!is.factor(grade)) grade <- as.factor(grade) else print("Grade already
is a factor")
#或者
if (!is.factor(grade)){
 grade <- as.factor(grade)
} else{
print("Grade already
is a factor")}
2. ifelse结构

语法:ifelse(cond, statement1, statement2)

示例:

ifelse(score > 0.5, print("Passed"), print("Failed"))
outcome <- ifelse (score > 0.5, "Passed", "Failed")
3. switch结构

语法:switch(expr, ...)

循环

1、for 循环
语法for (var in seq) statement

案例一,原子向量

df <- tibble(
  a = rnorm(10),
  b = rnorm(10),
  c = rnorm(10),
  d = rnorm(10)
)
output <- vector("double", ncol(df)) # 1. 输出.或是循环过程用到向量前面没有的话,需要创建一个空的向量,用vector()函数
for (i in seq_along(df)) { # 2. 序列。seq_along()取出向量的所有标量,并且每循环一次i的值是有所不同的。
  output[[i]] <- median(df[[i]]) # 3. 循环体
}  #注意不要漏掉括号和大括号
output

这一段代码output[[i]] <- median(df[[i]])中的i是代表向量中的标量,从而指定赋值在向量中的具体位置

案例二,数据框,合并函数

df <- tibble(
  a = rnorm(10),
  b = rnorm(10),
  c = rnorm(10),
  d = rnorm(10)
)
rescale01 <- function(x) {
  rng <- range(x, na.rm = TRUE)
  (x - rng[1]) / (rng[2] - rng[1])
}
df$a <- rescale01(df$a)
df$b <- rescale01(df$b)
df$c <- rescale01(df$c)
df$d <- rescale01(df$d)

# 更改为for循环体
df <- tibble(
  a = rnorm(10),
  b = rnorm(10),
  c = rnorm(10),
  d = rnorm(10)
)
rescale01 <- function(x) {
  rng <- range(x, na.rm = TRUE)
  (x - rng[1]) / (rng[2] - rng[1])
}
for (i in seq_along(df)) {  #数据框,这是表示列数
df[[i]] <- rescale01(df[[i]]) #这里的i如何理解?
}
2、其它 for 循环模式
for (nm in names(xs))  #names(xs)提取数据框中的列名,用名字继续循环
3、while 循环体

语法:while (cond) statement

while (condition) {
# 循环体
} #由条件和循环体两部分构成

for (i in seq_along(x)) {
# 循环体
}
# 等价于
i <- 1
while (i <= length(x)) {
# 循环体
i <- i + 1 #注意是循环体末尾需要加入该语句
}

for 循环和 while循环的区别

  • for循环中的条件是判断序列是否执行完,而序列终究是有限的。而while循环中的条件确实可以随意构建,只要statement中的变量值依旧不能在condition中为加,则一直会执行statement。故while可以无限循环,需要涉及好condition,防止计算机停不下来。
  • while可以改造为for循环,但是for循环不一定能够变为while循环。
  • for中的i在statement中自动+1,即i <- i +1
函数编写
### 函数基本格式 ----
f <- function(){
    ## Do something interesting
}

统计学

##注意变量分为离散型、有序和连续型
summary()#函数来获取描述性统计量
sapply(x, FUN, options)#
apply(array, margin, ...)#
fivenum() #
describe() #Hmisc包中的describe()函数可返回变量和观测的数量、缺失值和唯一值的数目、平均值、分位数,以及五个最大的值和五个最小的值
stat.desc(x, basic=TRUE, desc=TRUE, norm=FALSE, p=0.95) #来源pastecs包
aggregate()# 分组获取描述性统计量
by(data, INDICES, FUN) # 可以一次返回若干个统计量
table()#函数生成简单的频数统计,table(A, B),,xtabs()
prop.table() #将这些频数转化为比例值,使用prop.table()*100转化为百分比
with()
t.test() #获取置信区间

# 检验方法
compare_means(formula, data, method = "wilcox.test", paired = FALSE,
              group.by = NULL, ref.group = NULL, ...) # 均值比较和检验
stat_compare_means(mapping = NULL, comparisons = NULL hide.ns = FALSE,
                   label = NULL, #指定一个字符串,表示标签类型。可为:“p.signif”(显示显著性水平),“p.format”(显示格式化的P值)
                   label.x = NULL, label.y = NULL, #指定一个数值,表示显示标签的绝对坐标位置
                   ...)#对ggplot2的扩展,可将均值比较后的P值添加到ggplot图形中,如箱形图、点图、条形图和折线图等
t.test(measure1,mu=0.58,alternative="greater")# 单样本均值检验
t.test(y ~ x, data) #独立样本的t检验,均值,y为数值型向量,x为二分型向量
t.test(y1, y2,var.equal=F) #y1和y2均为数值型向量
var.equal=TRUE #假定方差相等
t.test(y1, y2, paired=TRUE) # 非独立样本的t检验,with(UScrime, t.test(U1, U2, paired=TRUE))
cor(as.numeric(fat),as.numeric(situation),method="spearman") #计算相关性
cor(height,weight)
cor.test.2.sample()#两个样本
cov() # 计算协方差
sigma2.test(weights,var0=10) #单样本的方差检验
var.test(measure.SPORT.1,measure.SPORT.0)
prop.test(10,147,0.1,alternative="less",correc=FALSE) #比例的检验
binom.test(10,147,0.1,alternative="less")#小样本
chisq.test()# 独立性的卡方检验
shapiro.test(data1$express) #正态分布检验

omparisons = NULL hide.ns = FALSE,
label = NULL, #指定一个字符串,表示标签类型。可为:“p.signif”(显示显著性水平),“p.format”(显示格式化的P值)
label.x = NULL, label.y = NULL, #指定一个数值,表示显示标签的绝对坐标位置
…)#对ggplot2的扩展,可将均值比较后的P值添加到ggplot图形中,如箱形图、点图、条形图和折线图等
t.test(measure1,mu=0.58,alternative=“greater”)# 单样本均值检验
t.test(y ~ x, data) #独立样本的t检验,均值,y为数值型向量,x为二分型向量
t.test(y1, y2,var.equal=F) #y1和y2均为数值型向量
var.equal=TRUE #假定方差相等
t.test(y1, y2, paired=TRUE) # 非独立样本的t检验,with(UScrime, t.test(U1, U2, paired=TRUE))
cor(as.numeric(fat),as.numeric(situation),method=“spearman”) #计算相关性
cor(height,weight)
cor.test.2.sample()#两个样本
cov() # 计算协方差
sigma2.test(weights,var0=10) #单样本的方差检验
var.test(measure.SPORT.1,measure.SPORT.0)
prop.test(10,147,0.1,alternative=“less”,correc=FALSE) #比例的检验
binom.test(10,147,0.1,alternative=“less”)#小样本
chisq.test()# 独立性的卡方检验
shapiro.test(data1$express) #正态分布检验


你可能感兴趣的:(r语言,生物信息学,1024程序员节)