美文网首页
[GuangZhou_Biotrainee]R语言基础_1

[GuangZhou_Biotrainee]R语言基础_1

作者: ShanSly | 来源:发表于2019-07-20 23:27 被阅读0次

    补充[ZHUHAI_Biotrainee] 第一周_课堂总结内容:https://www.jianshu.com/p/bbe94addb8ba

    一、R及RStudio介绍
    1、R的数据类型:

    A、以下三类:

    数值型
    字符型
    逻辑型

    B、判断数据类型:

    class()
    is.numeric/is.character/is.logical

    2、数据结构

    一维:向量
    二维:矩阵、数据框、list;与一维相同,都必须含有一个数据类型;

    3、List

    总览概况:

    列表

    元素

    向量、矩阵、数据框、list

    索引也是这样层层递进的关系

    二、脚本1:script1_vector_creat
    1、rep()函数,区分其中的参数,each、times

    Eg1:times

    > ve2<-1:3
    > ve2
    [1] 1 2 3
    > ve4<-rep(x =ve2,times=3)####常用的创建向量的函数3 rep
    > ve4
    [1] 1 2 3 1 2 3 1 2 3
    

    对ve4中的所有元素按照逻辑循环三次
    Eg2:each

    > a <- c(1,2,3)  
    > a
    [1] 1 2 3
    > rep(a,c(3,4,5))
     [1] 1 1 1 2 2 2 2 3 3 3 3 3
    

    依次对a中的单个元素进行单独设置循环数

    2、区分paste()以及paste0()

    paste:默认的分割符(空格)
    paste0:默认无分隔符
    Egpaste:

    > a<-c('I')
    > b<-c('like')
    > f<-c('I','You','She','He')
    > tmp<-c('Chandeler','Ross','Rachel','Monica','Joey','Pheebe')
    > paste(a,b,tmp)
    [1] "I like Chandeler" "I like Ross"      "I like Rachel"    "I like Monica"    "I like Joey"     
    [6] "I like Pheebe"
    

    paste有分隔符,如果有分隔符,可以添加sep = ''

    > paste(a,b,tmp,sep = '')
    [1] "IlikeChandeler" "IlikeRoss"      "IlikeRachel"    "IlikeMonica"    "IlikeJoey"      "IlikePheebe"  
    

    Egpaste0

    > paste0(a,b,tmp)
    [1] "IlikeChandeler" "IlikeRoss"      "IlikeRachel"    "IlikeMonica"    "IlikeJoey"      "IlikePheebe" 
    

    与上一个例子> paste(a,b,tmp,sep = '')

    3、length()查看元素个数
    三、脚本3:script3_vector_math
    1、运算法则

    %%:取余数 (注意:%%取余数用的时候较多)
    %/%:取整数
    != 判断是否不完全相等,因为有
    == ①判断是否完全相等;②返回的结果为逻辑值
    与或非
    实战%%题目如下:

    a<-seq(1,10,1);找出a中的奇数(练习使用操作符)

    > a<-seq(1,10,1)
    > a
     [1]  1  2  3  4  5  6  7  8  9 10
    > a%%2
     [1] 1 0 1 0 1 0 1 0 1 0
    > a[a%%2==1]
    [1] 1 3 5 7 9
    
    四、脚本4:script4_matrix
    1、取出奇偶行、利用逻辑值(T、F)/(1、0)

    实战题目:

    1.获取e的奇数行内容
    2.获取e的偶数行内容

    > e<-LETTERS[1:24]
    > e
     [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X"
    > dim(e)<-c(6,4)
    > e
         [,1] [,2] [,3] [,4]
    [1,] "A"  "G"  "M"  "S" 
    [2,] "B"  "H"  "N"  "T" 
    [3,] "C"  "I"  "O"  "U" 
    [4,] "D"  "J"  "P"  "V" 
    [5,] "E"  "K"  "Q"  "W" 
    [6,] "F"  "L"  "R"  "X" 
    > e_t<-1:nrow(e)
    > e[e_t%%2==1,]
         [,1] [,2] [,3] [,4]
    [1,] "A"  "G"  "M"  "S" 
    [2,] "C"  "I"  "O"  "U" 
    [3,] "E"  "K"  "Q"  "W" 
    > a[a%%2==1]
    [1] 1 3 5 7 9
    > e[e_t%%2==0,]
         [,1] [,2] [,3] [,4]
    [1,] "B"  "H"  "N"  "T" 
    [2,] "D"  "J"  "P"  "V" 
    [3,] "F"  "L"  "R"  "X
    

    思路:
    ①明确e是矩阵,dim()
    ②对1:nrow()中才可以选择奇数偶数行
    a%%2的结果为1,0 根据1,0而选择奇数偶数行

    2、head(),tail()函数

    可以对其中的参数n进行设置;head()取首;tail()取尾

    五、脚本5:script5_dataframe
    1、对数据框的索引用[](位置、名字、逻辑值),另外还可以用$(matrix,向量不可以用)
    > date<-c(21,22,23,35,52)
    > plan<-c('mon','tue','wed','thur','fri')
    > color<-c('green','red','white','black','purple')
    > April<-data.frame(date,plan,color)
    > April
      date plan  color
    1   21  mon  green
    2   22  tue    red
    3   23  wed  white
    4   35 thur  black
    5   52  fri purple
    > April$date[2]
    [1] 22
    

    实战:索引出April数据框的第2到4行第3列的元素(两种方法)

    > April[2:4,3]
    [1] "red"   "white" "black"
    > April[2:4,"color"]
    [1] "red"   "white" "black"
    > April[c(F,T,T,T,T,F),"color"]
    [1] "red"    "white"  "black"  "purple"
    > April[c(F,T,T,T,T),"color"]
    [1] "red"    "white"  "black"  "purple"
    
    六、脚本6:script6_list
    1、str()函数,查看数据结构

    Eg:

    > str(r_list)
    List of 4
     $ flag: chr "Hello world"
     $ yes : int [1:5] 1 2 3 4 5
     $     : int [1:5, 1:2] 1 2 3 4 5 6 7 8 9 10
     $     : chr [1:3] "mon" "tue" "wed"
    
    七、脚本7:script7_read_a_file
    1、读入文件:read.csv/table

    ①读进来存储数据格式的都是data.frame;
    ②reead.csv默认分隔符为逗号,read.table默认分隔符为一个或者多个空格、制表符、换行符、回车
    ③row.names = 1 将第一列作为行名
    存成文件:'0418.txt'中后缀是告诉用什么文件打开;
    comment.char = '!' 去掉!部分 注释符号
    常见:

    d<-read.csv('GSE17215_series_matrix.txt.gz',
                comment.char = '!',sep='\t',row.names = 1)
    f<-read.table('GSE17215_series_matrix.txt.gz',
                  comment.char = '!',
                  header=T,
                  row.names = 1)
    
    2、输出文件:write.table/write.csv

    编码文件:write.table/write.csv用什么编码格式编码文件,从而对应不同的保存格式,csv代表用对csv编码文件,table代表txt编码文件
    存成文件:'0418.txt'中后缀是告诉用什么文件打开,若‘0908.csv’代表用csv格式打开:
    Eg:

    write.table(x = f,file = '0418.txt')
    save(f,file = '17215.Rdata')
    

    save对应Rdata等形式的保存文件;table对应txt;csv对应csv;

    八、packages

    1、思路:
    代码+说明文档+数据集
    删除包:remove.packages()
    2、若一次性安装多个R包,可使用如下代码:

    #library("monocle")
    BiocManager::install("slingshot")
    options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")
    options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
    options()$repos
    options()$BioC_mirror
    
    shanshan <- c("scatterplot3d",
    "made4",
    "pheatmap",
    "matrixStats",
    "statmod",
    
    "FactoMineR",
    "jackstraw",
    
    "ReactomePA",
    "org.Mm.eg.db",
    "clusterProfiler",
    "GOSemSim",
    "arulesViz",
    
    "ggpubr")
    
    
    
    
    packages=(shanshan
    )
    ipak <- function(pkg){
      new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
      if (length(new.pkg)) 
        BiocManager::install(new.pkg, dependencies = TRUE)
      sapply(pkg, require, character.only = TRUE)
    }
    ipak(packages)
    
    
    
    library("taRifx")
    library("matrixStats")
    library("ggplot2")
    library("Rtsne")
    

    修改包名,注意检查R包是否安装成功。

    九、脚本9:script9_for_apply_function
    1、for()函数

    ①for函数的格式:for(循环数){},其中x代表了for循环数数,{}是要执行的操作
    例:for(i in 1:nrow(test)){test_r[i,1]<-mean(c(test[i,1],test[i,3]))test_r[i,2]<-paste0(test[i,2],test[i,4]) }
    ②使用for函数时,要对for的输出结果有了解

    实战:
    实现每行的第1个和第3个元素取均值,第2个和第4个元素无缝连接在一起

    > test<-data.frame(a=seq(1,10,2),
    +                  b=seq(2,11,2),
    +                  c=seq(11,20,2),
    +                  d=c('mon','tues','wednes','thurs','fri'))
    > test
      a  b  c      d
    1 1  2 11    mon
    2 3  4 13   tues
    3 5  6 15 wednes
    4 7  8 17  thurs
    5 9 10 19    fri
    > test_r<-data.frame()
    > for(i in 1:nrow(test)){
    +   test_r[i,1]<-mean(c(test[i,1],test[i,3]))
    +   test_r[i,2]<-paste0(test[i,2],test[i,4])
    + }
    > test_r
      V1      V2
    1  6    2mon
    2  8   4tues
    3 10 6wednes
    4 12  8thurs
    5 14   10fri
    

    思路:
    ①根据题目要求,首先明确输出的结果为data.frame
    ②设置空载容器,用来装输出结果,所以设置空向量 test_r<-data.frame()
    ②for函数的()里:是对每一行的元素进行操作,所以设置参数i,并且为i:nrow(test),对每一行循环操作
    ③for函数的{}里:根据题意,取出元素并输入相应函数mean(),paste0()

    2、funcation()函数以及apply()函数

    往往apply()函数不能单独使用,需要结合funcation()函数
    funcation()函数
    ①funcation()函数的格式为funcation(x){},x为设置的参数,{}里面是对参数执行的相应代码

    实战:
    用function和apply求出test里每行1、2、3个元素的标准差和平均值,并第4个元素后添加'day';

    > test<-data.frame(a=seq(1,10,2),
    +                  b=seq(2,11,2),
    +                  c=seq(11,20,2),
    +                  d=c('mon','tues','wednes','thurs','fri'))
    > tes
    >y<-function(x){
      mean_row<-mean(as.numeric(c(x[1],x[2],x[3])))
      sd_row <- sd(as.numeric(c(x[1],x[2],x[3])))
      str_paste<-paste0(x[4],"day")
      result<-c(mean_row,str_paste,str_paste)
      return(result)
    }
    >test1<-apply(test,1,y)
    test1
    

    注意:
    ①funcation中x为参数,是定义该函数的一个参数。而对每一行进行操作,是在apply中的1表现出来的;
    ②在定义funcation的参数时,我们要斟酌好x代表的含义,根据题目要求,是对每一行进行操作操作,这里x代表每行;所以在funcation{}里对参数执行代码时,应该表示出每一行的第几个元素。

    相关文章

      网友评论

          本文标题:[GuangZhou_Biotrainee]R语言基础_1

          本文链接:https://www.haomeiwen.com/subject/edzflctx.html