美文网首页
*R语言基础function

*R语言基础function

作者: 曲凉不见 | 来源:发表于2021-03-23 09:23 被阅读0次

    生成随机数部分原帖地址:https://zhuanlan.zhihu.com/p/72859263

    1. 取子集
    data=read.table("file.txt",header=T)
    data_part1=subset(data,Class=="A"|Class=="B")
    data_part2=subset(data,Class=="A"&Group=="B")
    
    2. 初始化一个空矩阵
    newdata=matrix(nrow=10,ncol=5)
    colnames(newdata)=c("ID","Gene","Group","Class","FPKM")
    
    a=matrix(c(1,2,3,4,5,6,7,8,9,10),nrow=5,ncol=2)
    a=  1  6
        2  7
        3  8
        4  9
        5  10
    
    a=c(rep(0,5))
    a=0 0 0 0 0
    
    3. for循环
    x=1:5
    y=3:5
    line=0
    for (i in 1:5) {
      for (j in 1:3) {
        line=line+1;
        number1=x[i];
        number2=y[j];
        if (number1>number2 | number1<number2) {
          print(c(line,"no",x[i],y[j],"------------"));
        }
        else {
          print(c(line,"yes",x[i],y[j],"------------"));
        }
      }
    }
    
    4. T检验
    ttest=t.test()
    
    5. 正态分布
    df=data$Class
    pnorm=pnorm(df,mean(df),sd(df))
    
    6. 合并数据
    #merge合并两个数据框,标识共同的列或行
    merge(df1,df2,by="Gene")
    merge(df1,df2,by.x="ID1",by.y="ID2")
    
    #cbind根据列合并,合并所有列
    cbind(df1,df2)
    
    #rbind根据行合并,合并所有行
    rbind(df1,df2)
    
    #paste
    x=1:10
    y=paste("k",x,sep="")
    y=k1 k2 k3 ... k10
    
    7. 产生空数组/矩阵
    #做一个空矩阵
    newmat=matrix(ncol=2,nrow=3)
    
    #做一个空数组
    arr=seq(from=0,to=0,length.out=10)
    
    8.基础计算公式
    #常规除法
    35/10
    
    #取整数
    35 %/% 10
    
    #求余数
    35 %% 10
    
    #向下取整
    floor(2.3)
    
    #向上取整
    ceiling(2.3)
    
    #四舍五入取整
    round(2.4)
    [1] 2
    round(2.5)
    [1] 3
    
    9.生成随机数/数据
    #runif
    runif(n,min,max)
    随机生成n个在min和max之间的随机数
    
    #:
    1:10
    1到10的等差序列
    
    #seq
    seq(x,y,z)
    x=起点,y=终点,z=等间距
    
    seq(from=x,to=y,length=z)
    生成长度为z的序列,范围从x到y
    
    #rep
    rep(1:3,3)
    将1 2 3重复3次,1 2 3 1 2 3 1 2 3
    
    rep(1:3,each=3)
    将1 2 3中的每一个重复3次,1 1 1 2 2 2 3 3 3
    
    #factor
    x <- c("Man", "Male", "Man", "Lady", "Female")
    xf <- factor(x, levels = c("Male", "Man" , "Lady", "Female"),
                     labels = c("Male", "Male", "Female", "Female"))
    变成两类标签
    
    #gl
    gl(3,5,length=15,label=c('a','b','c'))
    a a a a a b b b b b c c c c c
    gl(k,n,length=,label=)
    构造一个因子序列。k为水平数,n为每个水平连续出现的次数,length为整个序列的长度,label为因子标签
    
    #sample随机取样
    sample(x, size, replace = FALSE, prob = NULL)
    x被抽样数据;size抽样个数;replace = FALSE/TRUE无重复抽样/重复抽样;prob挑选概率(x与prob对应)
    
    sample(1:100, 20, replace=FALSE)
    [1] 71 83 24 75 35 51  9 16 99 39 68 74 85 60 44 98 20  2 87 21
    
    sample(letters, 20, replace=FALSE) #无重复
    [1] "e" "a" "l" "c" "r" "h" "s" "z" "i" "d" "j" "g" "o" "f" "n" "y" "b" "t"
    [19] "q" "m"
    
    x = c(1:20)
    sample(x)#随机排列x
    
    sample(c(0,1), 10, replace=TRUE, prob=c(0.2, 0.8)) 
    #分别以0.2和0.8的概率抽取0和1
    [1] 1 1 1 1 1 1 1 1 0 0
    
    #strsplit(x) 字符分割
    strsplit(x, split, fixed = FALSE, perl = FALSE)
    根据split将x分割,若split=“”,则将x分为单个字符
    strsplit("split","", fixed = FALSE, perl = FALSE)
    [1] "s" "p" "l" "i" "t"
    #默认split为正则表达式,可使用fixed=TRUE,对split做精确匹配
    #当perl=TRUE时,使用perl的正则表达式规则
    #当分隔符为?, +, {, |, (, )时,要使用'\\'来消除特殊含义
    
    x <- "a5aa646a4d9a4da1d3a49d79a41d1da"
    strsplit(x, "\\d") #根据每个数字分割
    
    strsplit(x, "[:alnum:]") #任何一个字母或数字(等价于[a-ZA-Z0-9])
    
    #生成拟合概率函数的数据
    统一的形式:前缀+分布函数名
    d 表示密度函数(density);p 表示分布函数(生成相应分布的累积概率密度函数);q 表示分位数函数,能够返回特定分布的分位数(quantile);r 表示随机函数,生成特定分布的随机数(random)
    rnorm(100, mean=0, sd=1) #生成100个服从标准正态分布的序列
    
    以此类推:
    rexp(n, rate=1)   #指数
    rgamma(n, shape, rate=1, scale=1/rate)   #r 分布
    rpois(n, lambda)   #泊松
    rt(n, df, ncp)   #t 分布
    rf(n, df1, df2, ncp)   #f 分布
    rbinom(n, size, prob)   #二项分布
    rweibull(n, shape, scale=1)   #weibull 分布
    rbata(n, shape1, shape2)   #bata 分布runif(n,min=0,max=1)  #均匀分布
    
    #生成离散随机变量(借助for循环)
    p1<-0.15
    p2<-0.2
    p3<-0.3
    p4<-0.35
    disrand<-function(i){
      u<-runif(1,0,1)   #生成0-1之间的一个随机数
      if(u<p1) x <- 1 else #如果随机数u小于p1
        if(u<p2+p2) x <- 2 else #如果随机数u大于等于p1且小于p2+p2
          if(u<p3+p2+p1) x <- 3 else
            x <- 4
          return(x) #返回x
          }
    
    Xa <- rep(NA,100) #生成一个有100个NA的向量,用于存放生成的随机数
    for (i in 1:100)
      Xa[i] <- disrand(i)
    Xa
    
    > Xa
      [1] 1 1 2 3 2 4 1 1 2 4 4 2 2 2 2 4 2 4 4 4 3 2 4 1 1 1 2 4 1 3 1 3 4 2 4 2
     [37] 2 4 4 1 4 3 2 4 3 4 3 3 3 4 4 3 4 2 2 1 4 4 2 1 4 2 4 2 4 1 2 2 1 4 4 3
     [73] 4 4 4 4 4 2 4 1 4 3 4 3 4 1 4 4 4 2 3 4 3 2 3 2 4 4 1 4
    
    10.R语言中正则表达式转义字符
    类型 写法 意义
    空白元字符 [\b] 回退(并删除)一个字符(backspace)
    空白元字符 \f 换页符
    空白元字符 \n 换行符
    空白元字符 \r 回车符
    空白元字符 \t 制表符(tab)
    空白元字符 \v 垂直制表符。注:\r\n是windows所用的文本行结束符,Unix和Linux只是用一个换行符来结束一个文本行
    匹配数字与非数字 \d 任何一个数字字符,等价于[0-9]
    匹配数字与非数字 \D 任何一个非数字字符,等价于^[0-9]
    匹配字母\非字母与数字 \w 任何一个字母数字字符(大小写均可以)或下划线字符(等价于[a-zA-Z0-9])
    匹配字母\非字母与数字 \W 任何一个非字母数字或下划线字符(等价于[^a-zA-Z0-9])
    匹配空白字符 \s 任何一个空白字符(等价于[\f\n\r\t\v])
    匹配空白字符 \S 任何一个非空白字符(等价于[^\f\n\r\t\v])
    POSIX字符类 [:alnum:] 任何一个字母或数字(等价于[a-ZA-Z0-9])
    POSIX字符类 [:alpha:] 任何一个字母(等价于[a-ZA-Z])
    POSIX字符类 [:blank:] 空格或制表符(等价于[\t ]) 注:t后面有一个空格
    POSIX字符类 [:cntrl:] ASCII控制字符(ASCII 0到31,再加上ASCII 127)
    POSIX字符类 [:digit:] 任何一个数字(等价于[0-9])
    POSIX字符类 [:graph:] 和[:print:]一样,但不包括空格
    POSIX字符类 [:lower:] 任何一个小写字母(等价于[a-z])
    POSIX字符类 [:print:] 任何一个可打印字符
    POSIX字符类 [:punct:] 既不属于[:alnum:],也不属于[:cntrl:]的任何一个字符
    POSIX字符类 [:space:] 任何一个空格字符,包括空格(等价于[f\n\r\t\v ] 注:v后面有一个空格
    POSIX字符类 [:upper:] 任何一个大写字母(等价于[A-Z])
    POSIX字符类 [:xdigit:] 任何一个十六进制数字(等价于[a-fA-F0-9])
    其他 . 可以匹配任何单个的字符字母数字甚至.字符本身。不能匹配换行
    其他 "\\" 转义字符,如果要匹配就要写成"\\(\\)"
    其他 | 表示可选项,即竖线前后的表达式任选一个
    其他 ^ 取非匹配
    其他 $ 放在句尾,表示一行字符串的结束
    其他 () 提取匹配的字符串,(\s*)表示连续空格的字符串
    其他 [] 选择方括号中的任意一个(如[0-2]和[012]完全等价,[Rr]负责匹配字母R和r)
    其他 {} 前面的字符或表达式的重复次数。如{5,12}表示重复的次数不能小于5,不能多于12,否则都不匹配
    其他 * 匹配零个或任意多个字符或字符集合,也可以没有匹配
    其他 + 匹配一个或多个字符,至少匹配一次
    其他 ? 匹配零个或一个字符
    11. 分割字符
    strsplit(字符,要分割的标识,fixed = FALSE, perl = FALSE, useBytes = FALSE)
    

    fixed=F,用正则表达
    perl=F,是否用perl的表示方法
    useBytes=T,一个字节一个字节的比,F是一个词一个词的拆

    相关文章

      网友评论

          本文标题:*R语言基础function

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