前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言day7:函数的高级运用(2)

R语言day7:函数的高级运用(2)

原创
作者头像
不会写代码的医学生
发布2024-03-14 11:27:28
1030
发布2024-03-14 11:27:28
举报

apply()族函数

1.apply 处理矩阵或数据框

#apply(X, MARGIN, FUN, …)

#其中X是数据框/矩阵名(变量名称);

#MARGIN为1表示行,为2表示列,FUN是函数

代码语言:r
复制
rm(list = ls())
代码语言:r
复制
test<- iris[1:6,1:4]

apply(test, 2, mean) #对test每一列求平均值
代码语言:r
复制
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##    4.9500000    3.3833333    1.4500000    0.2333333
代码语言:r
复制
apply(test, 1, sum) #对test每一行求和
代码语言:r
复制
##    1    2    3    4    5    6 
## 10.2  9.5  9.4  9.4 10.2 11.4

2.lapply(list, FUN, …)

对列表/向量中的每个元素实施相同的操作

代码语言:r
复制
lapply(1:4,rnorm)
代码语言:r
复制
## [[1]]
## [1] -0.6585207
## 
## [[2]]
## [1] -1.794612 -1.093297
## 
## [[3]]
## [1] 0.2860504 0.6618459 1.2400498
## 
## [[4]]
## [1]  0.71096165 -1.21823103  0.30138537 -0.08748238

两个数据框的链接

代码语言:r
复制
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'), 
                    blood_type = c("A","B","O","AB"))
test1
代码语言:r
复制
##     name blood_type
## 1  jimmy          A
## 2 nicker          B
## 3  Damon          O
## 4 Sophie         AB
代码语言:r
复制
test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
                    group = c("group1","group1","group2","group2"),
                    vision = c(4.2,4.3,4.9,4.5))
test2
代码语言:r
复制
##     name  group vision
## 1  Damon group1    4.2
## 2  jimmy group1    4.3
## 3 nicker group2    4.9
## 4   tony group2    4.5
代码语言:r
复制
library(dplyr)
inner_join(test1,test2,by="name") #取交集
代码语言:r
复制
##     name blood_type  group vision
## 1  jimmy          A group1    4.3
## 2 nicker          B group2    4.9
## 3  Damon          O group1    4.2
代码语言:r
复制
left_join(test1,test2,by="name") #左连接
代码语言:r
复制
##     name blood_type  group vision
## 1  jimmy          A group1    4.3
## 2 nicker          B group2    4.9
## 3  Damon          O group1    4.2
## 4 Sophie         AB   <NA>     NA
代码语言:r
复制
right_join(test1,test2,by="name")
代码语言:r
复制
##     name blood_type  group vision
## 1  jimmy          A group1    4.3
## 2 nicker          B group2    4.9
## 3  Damon          O group1    4.2
## 4   tony       <NA> group2    4.5
代码语言:r
复制
full_join(test1,test2,by="name") #全连接
代码语言:r
复制
##     name blood_type  group vision
## 1  jimmy          A group1    4.3
## 2 nicker          B group2    4.9
## 3  Damon          O group1    4.2
## 4 Sophie         AB   <NA>     NA
## 5   tony       <NA> group2    4.5

表达矩阵画箱线图

代码语言:r
复制
# 表达矩阵
set.seed(10086)
exp = matrix(rnorm(18),ncol = 6)
exp = round(exp,2) #截取留下小数点后两位
rownames(exp) = paste0("gene",1:3)
colnames(exp) = paste0("test",1:6)
exp[,1:3] = exp[,1:3]+1 #一至三列数字在原来的基础上+1
exp
代码语言:r
复制
##       test1 test2 test3 test4 test5 test6
## gene1  1.55  1.49  1.80 -0.37 -1.82 -1.62
## gene2 -1.74  0.37  2.08  2.11 -0.22  1.42
## gene3  1.57  1.25  1.32  2.49  0.58 -0.81
代码语言:r
复制
library(tidyr)
library(tibble)
library(dplyr)
dat = t(exp) %>% 
  as.data.frame() %>% 
  rownames_to_column() %>% 
  mutate(group = rep(c("control","treat"),each = 3))

pdat = dat%>% 
  pivot_longer(cols = starts_with("gene"),#哪些列合并为一列
               names_to = "gene", #原来的列名改为新的列名
               values_to = "count") #新的一列取值
#宽边长
library(ggplot2)
p = ggplot(pdat,aes(gene,count))+
  geom_boxplot(aes(fill = group))+
  theme_bw()
p

1.文件没有放到工作目录或工作目录有问题(有中文)

2.函数名称写错了或者函数属于某一个包没有加载需要用到该函数的包

3.没有安装该包或依赖包

4.

(1)不是一个对象,前面没带引号

(2)是一个对象,没赋值

一些顶呱呱的函数

代码语言:r
复制
# 1.match-----
load("matchtest.Rdata")
x
代码语言:r
复制
##                                              file_name
## 1 708a16a3-7a5e-4e27-b06b-4c3c308b11fe.htseq.counts.gz
## 2 95e726db-5ccc-4836-a2ae-7feaddaf9f1b.htseq.counts.gz
## 3 90a46dce-5762-47ec-925c-deff853069aa.htseq.counts.gz
## 4 587e44e4-87ba-4981-a520-d20612486f53.htseq.counts.gz
## 5 1b843dbb-5ef0-47ca-9783-dbeb94aa6df3.htseq.counts.gz
## 6 09796233-3f40-4deb-b77d-2267c3afff59.htseq.counts.gz
## 7 44f1dc34-a01e-4a7b-a7a1-a90064039fdd.htseq.counts.gz
##                             ID
## 1 TCGA-AA-3531-01A-01R-0821-07
## 2 TCGA-A6-2678-11A-01R-A32Z-07
## 3 TCGA-AA-A02K-01A-03R-A32Y-07
## 4 TCGA-NH-A6GA-01A-11R-A37K-07
## 5 TCGA-AZ-6600-11A-01R-1774-07
## 6 TCGA-CM-6676-01A-11R-1839-07
## 7 TCGA-AA-3971-01A-01R-1022-07
代码语言:r
复制
y
代码语言:r
复制
##                    90a46dce-5762-47ec-925c-deff853069aa.htseq.counts.gz
## ENSG00000000003.13                                                 6564
## ENSG00000000005.5                                                    29
## ENSG00000000419.11                                                 2659
## ENSG00000000457.12                                                  246
## ENSG00000000460.15                                                  145
## ENSG00000000938.11                                                   37
## ENSG00000000971.14                                                   77
##                    587e44e4-87ba-4981-a520-d20612486f53.htseq.counts.gz
## ENSG00000000003.13                                                 3127
## ENSG00000000005.5                                                     0
## ENSG00000000419.11                                                  889
## ENSG00000000457.12                                                  382
## ENSG00000000460.15                                                  188
## ENSG00000000938.11                                                  749
## ENSG00000000971.14                                                  708
##                    95e726db-5ccc-4836-a2ae-7feaddaf9f1b.htseq.counts.gz
## ENSG00000000003.13                                                 6330
## ENSG00000000005.5                                                     0
## ENSG00000000419.11                                                 2428
## ENSG00000000457.12                                                 1701
## ENSG00000000460.15                                                 1009
## ENSG00000000938.11                                                  220
## ENSG00000000971.14                                                  530
##                    09796233-3f40-4deb-b77d-2267c3afff59.htseq.counts.gz
## ENSG00000000003.13                                                 3583
## ENSG00000000005.5                                                    70
## ENSG00000000419.11                                                 1436
## ENSG00000000457.12                                                  590
## ENSG00000000460.15                                                  440
## ENSG00000000938.11                                                  812
## ENSG00000000971.14                                                 4173
##                    708a16a3-7a5e-4e27-b06b-4c3c308b11fe.htseq.counts.gz
## ENSG00000000003.13                                                  643
## ENSG00000000005.5                                                    17
## ENSG00000000419.11                                                 2476
## ENSG00000000457.12                                                  804
## ENSG00000000460.15                                                  496
## ENSG00000000938.11                                                  962
## ENSG00000000971.14                                                 3958
##                    44f1dc34-a01e-4a7b-a7a1-a90064039fdd.htseq.counts.gz
## ENSG00000000003.13                                                 1514
## ENSG00000000005.5                                                    13
## ENSG00000000419.11                                                  876
## ENSG00000000457.12                                                  483
## ENSG00000000460.15                                                  250
## ENSG00000000938.11                                                   75
## ENSG00000000971.14                                                  272
##                    1b843dbb-5ef0-47ca-9783-dbeb94aa6df3.htseq.counts.gz
## ENSG00000000003.13                                                11751
## ENSG00000000005.5                                                    26
## ENSG00000000419.11                                                 2494
## ENSG00000000457.12                                                  531
## ENSG00000000460.15                                                  632
## ENSG00000000938.11                                                   85
## ENSG00000000971.14                                                  319

如何把y的列名正确替换为x里面的ID?

代码语言:r
复制
## (1)分步解法
a = colnames(y)
b = x$file_name
k = match(a,b);k
代码语言:r
复制
## [1] 3 4 2 6 1 7 5
代码语言:r
复制
#match(a,b)的意思是a里的每个元素在b的第几个位置上。
#是b的下标,可以给b取子集,也可以给与b对应的其他向量取子集。
colnames(y) = x$ID[k]

## (2)一步解法
load("matchtest.Rdata")
colnames(y) = x$ID[match(colnames(y),x$file_name)]

## (3)放弃match的解法
load("matchtest.Rdata")
rownames(x) = x$file_name
x = x[colnames(y),]
colnames(y) = x$ID
代码语言:r
复制
# 2.一些搞文件的函数----
dir() # 列出工作目录下的文件
代码语言:r
复制
##  [1] "0_pre_install.R"      "1_玩转字符串.R"      
##  [3] "2_玩转数据框.R"       "3_条件和循环.R"      
##  [5] "4_隐式循环.R"         "5_两个数据框的连接.R"
##  [7] "6_表达矩阵画箱线图.R" "7_一些顶呱呱的函数.R"
##  [9] "8_exercise.R"         "9_anwser.R"          
## [11] "day71.html"           "day71.md"            
## [13] "day71.Rmd"            "day72.html"          
## [15] "day72.md"             "day72.Rmd"           
## [17] "day73.md"             "day73.Rmd"           
## [19] "day74.html"           "day74.md"            
## [21] "day74.Rmd"            "deg.Rdata"           
## [23] "figure"               "group.csv"           
## [25] "matchtest.Rdata"      "R_04.Rproj"          
## [27] "test1.Rdata"          "test2.Rdata"         
## [29] "未命名.html"          "未命名.Rmd"
代码语言:r
复制
dir(pattern = ".R$") #列出工作目录下以.R结尾的文件
代码语言:r
复制
##  [1] "0_pre_install.R"      "1_玩转字符串.R"      
##  [3] "2_玩转数据框.R"       "3_条件和循环.R"      
##  [5] "4_隐式循环.R"         "5_两个数据框的连接.R"
##  [7] "6_表达矩阵画箱线图.R" "7_一些顶呱呱的函数.R"
##  [9] "8_exercise.R"         "9_anwser.R"
代码语言:r
复制
file.create("douhua.txt") #用代码创建文件
代码语言:r
复制
## [1] TRUE
代码语言:r
复制
file.exists("douhua.txt") #某文件在工作目录下是否存在
代码语言:r
复制
## [1] TRUE
代码语言:r
复制
file.remove("douhua.txt") #用代码删除文件
代码语言:r
复制
## [1] TRUE
代码语言:r
复制
file.exists("douhua.txt") #删掉了就不存在啦
代码语言:r
复制
## [1] FALSE
代码语言:r
复制
## 可以批量的新建和删除
f = paste0("douhua",1:100,".txt")
file.create(f)
代码语言:r
复制
##   [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [12] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [23] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [34] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [45] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [56] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [67] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [78] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [89] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [100] TRUE
代码语言:r
复制
file.remove(f)
代码语言:r
复制
##   [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [12] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [23] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [34] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [45] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [56] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [67] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [78] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [89] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [100] TRUE

引用自生信技能树课程

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • apply()族函数
    • 1.apply 处理矩阵或数据框
      • 2.lapply(list, FUN, …)
      • 对列表/向量中的每个元素实施相同的操作
      • 两个数据框的链接
      • 表达矩阵画箱线图
      • 一些顶呱呱的函数
        • 如何把y的列名正确替换为x里面的ID?
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档