• R语言学习(瑞士军刀)


    (windows安装安装路径不要出现中文,不然RStudio找不到R软件)

    1、R中的数据结构

    1.1向量,标量

    1.2矩阵

    1.3数组

    1.4列表

    1.5数据框

    1.6因子

    1.7时间序列

    2、R语言基础

    2.1运算符

      R 语言赋值使用的是左箭头 <- 符号,不过一些新版本也支持等号=,也可以用->符号(最新版本)。

    2.2变量的定义

      R 语言的有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成。

    变量名称以字母或点开头。

      注意:首字母为“.”点,或者英文字母,“.”号后面不能直接跟数字

    demo

    > var.1 = c(0,1,2,3) 
    > print(var.1)
    [1] 0 1 2 3
    > var.2 = c("Hello","R")
    > print(var.2)
    [1] "Hello" "R"    
    > var.3 <= c("Hello","Java")
    错误: 找不到对象'var.3'
    #符号错误 <=   应该是 <-
    > var.3 <- c("Hello","Java")
    > print(var.3)
    [1] "Hello" "Java" 
    > c(true,1)->var.4
    错误: 找不到对象'true'
    #布尔值大小写敏感
    > c(TRUE,1) -> var.4
    > print(var.4)
    [1] 1 1
    >

      列出已定义的变量ls()函数

    > var.1 = c(0,1,2,3) 
    > var.2 = c("Hello","R")
    > var.3 <- c("Hello","Java")
    > c(TRUE,1) -> var.4
    > print(ls())
    [1] "var.1" "var.2" "var.3" "var.4"
    > 
    

      删除变量可以使用rm()函数

    > print(ls())
    [1] "var.1" "var.2" "var.3" "var.4"
    > rm(var.1)
    > print(ls())
    [1] "var.2" "var.3" "var.4"
    > 
    

      linux中进入和退出R软件

    [root@VM-0-3-centos ~]# R
    
    R version 3.6.0 (2019-04-26) -- "Planting of a Tree"
    Copyright (C) 2019 The R Foundation for Statistical Computing
    Platform: x86_64-redhat-linux-gnu (64-bit)
    
    R是自由软件,不带任何担保。
    在某些条件下你可以将其自由散布。
    用'license()'或'licence()'来看散布的详细条件。
    
    R是个合作计划,有许多人为之做出了贡献.
    用'contributors()'来看合作者的详细情况
    用'citation()'会告诉你如何在出版物中正确地引用R或R程序包。
    
    用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或
    用'help.start()'通过HTML浏览器来看帮助文件。
    用'q()'退出R.
    
    > q()
    Save workspace image? [y/n/c]: n
    

      运行R脚本,在命令窗口使用Rscript来执行该脚本

     
    #linux 创建编辑脚本文件 并运行脚本文件
    [root@VM-0-3-centos zxgtest]# touch test.R
    [root@VM-0-3-centos zxgtest]# vim test.R
    [root@VM-0-3-centos zxgtest]# Rscript test.R
    [1] 1 2 3 4 5

    2.3、常见的函数

      输入输出print()函数

    > print("Hello R!")
    [1] "Hello R!"
    > 
    

      拼接cat()函数

    > cat("张三","今年",18,"岁",'
    ')
    张三 今年 18 岁 
    > 
    

      cat()函数输出到文件中,append=TRUE输出到文件中不覆盖,追加到后面

    > cat("输出到文件中",file="/zxgtest/test.txt")
    
    
    > cat("追加数据不覆盖之前文件数据",file="/zxgtest/test.txt",append=TRUE)

      sink() 函数可以把控制台输出的文字直接输出到文件中去:

    > sink("/zxgtest/sinkfile.txt")
    #这样会将控制台输出的数据全部存储到指定的文件中,控制台不输出数据,显然这不是我们需要的效果
    #split=TRUE 可以实现既将控制台输出的文件保存到文件中,又在控制台显示
    > sink("/zxgtest/sinkfile.txt",split=TRUE)
    #如果想取消输出到文件,可以调用无参数的 sink :
    >sink()

      readLines() 从文件中读入数据

      获取当前工作目录,设置当前工作目录,查看当前工作目录

    # 当前工作目录
    print(getwd())
    
    # 设置当前工作目录
    setwd("/zxgtwst/test2")
    
    # 查看当前工作目录
    print(getwd())
    

    3、R语言两种注释方式

    3.1、单行注释 #

    # 变量赋值
    a <- 9

    3.2、多行注释"

    if(TRUE) {
        "
        这是一个多行注释的实例
        注释内容放在单引号或双引号之间
        "
    }
    

    4、基础运算

    优先级 符号 含义
    1 () 括号
    2 ^ 乘方运算
    3 %% 整除求余
      %/% 整除
    4 * 乘法
      / 除法
    5 + 加法
      - 减法
    > 1 + 2*3
    [1] 7
    > (1+2)*3
    [1] 9
    > 3 / 4
    [1] 0.75
    > 3.4-1.2
    [1] 2.2
    > 1 -4 * 0.5 ^ 3
    [1] 0.5
    > 8 / 3 %% 2
    [1] 8
    > 8 / 4 %% 2
    [1] Inf
    > 3 %% 2^2
    [1] 3
    > 10 / 3 %/% 2
    [1] 10
    

      关系运算符(>  <  ==  !=  >=  <=)

    > v <- c(2,4,6,9)
    > t <- c(1,4,7,9)
    > print(v>t)
    [1]  TRUE FALSE FALSE FALSE
    > print(v < t)
    [1] FALSE FALSE  TRUE FALSE
    > print(v == t)
    [1] FALSE  TRUE FALSE  TRUE
    > print(v!=t)
    [1]  TRUE FALSE  TRUE FALSE
    > print(v>=t)
    [1]  TRUE  TRUE FALSE  TRUE
    > print(v<=t)
    [1] FALSE  TRUE  TRUE  TRUE
    > 
    

      逻辑运算

    运算符 描述
    & 元素逻辑与运算符,将第一个向量的每个元素与第二个向量的相对应元素进行组合,如果两个元素都为TRUE则记过为TRUE,否则为FALSE
    | 元素逻辑或运算符,将第一个向量的每个元素与第二个向量的相对应元素进行组合,如果两个元素中有一个为TRUE,则结果为TRUE,如果都为FALSE,则返回FALSE
    逻辑非运算符,返回向量每个元素相反的逻辑值,如果元素为TRUE则返回FALSE,如果元素为FALSE则返回TRUE
    && 逻辑与运算符,只对两个向量对一个元素进行判断,如果两个元素都为TRUE,结果为TRUE,否则为FALSE
    || 逻辑或运算符,只对两个向量,对第一个元素进行判断,如果两个元素中一个为TRUE,则结果为TRUE,如果都为FALSE则返回FALSE
    > v = c(3,1,TRUE,2+3i)
    > t = c(4,1,FALSE,2+3i)
    > print(v&t)
    [1]  TRUE  TRUE FALSE  TRUE
    > print(v|t)
    [1] TRUE TRUE TRUE TRUE
    > print(!t)
    [1] FALSE FALSE  TRUE FALSE
    > p = c(3,0,TRUE,2+2i)
    > k = c(1,3,TRUE,2+3i)
    > print(p&&k)
    [1] TRUE
    > print(p||k)
    [1] TRUE
    #&&和||只对第一个元素进行比较

      赋值运算符

    运算符 描述
    <-、=、<<- 向左赋值
    ->、->> 向右赋值

      其他运算符

    运算符 描述
    冒号运算符,用于创建一系列数字的向量
    %in% 用于判断元素是否再向量里,返回布尔值,有的话返回TRUE,没有的话返回FALSE
    %*% 用于矩阵与它转置的矩阵相乘
    > v <- 1:10  #1到10的向量
    > print(v)
     [1]  1  2  3  4  5  6  7  8  9 10
    > s = c(1,2,3)
    > print(s)
    [1] 1 2 3
    > v1 = 3
    > v2 = 20
    > print(v1 %in% v) #判断数字是否再向量v中
    [1] TRUE
    > print(v2 %in% v)
    [1] FALSE
    > M = matrix(c(2,6,5,1,10,4),nrow = 2,ncol = 3,byrow = TRUE)#矩阵与它置换的矩阵相乘
    > t = M %*% t(M)
    > print(t)
         [,1] [,2]
    [1,]   65   82
    [2,]   82  117
    > 
    

      常用数学函数

    函数 说明
    sqrt(n)

    n的平方根

    exp(n) 自然常数e的n次方
    log(m,n) m的对数函数,返回n的几次方等于m
    log10(m) 相当于log(m,10)
    > sqrt(4)
    [1] 2
    > sqrt(16)
    [1] 4
    > exp(1)
    [1] 2.718282
    > exp(2)
    [1] 7.389056
    > log(2,4)
    [1] 0.5
    > log10(10000)
    [1] 4
    > log(10,100)
    [1] 0.5
    > 
    

      取整函数

    名称 参数模型 含义
    round (n) 对n四舍五入取整
    round (n,m) 对n保留m位小数四舍五入
    ceiling (n) 对n向上取整
    floor (n) 对n向下取整
    > round(1.5)   #round函数谨慎使用,有时5也会舍去
    [1] 2
    > round(2.5)
    [1] 2
    > round(3.5)
    [1] 4
    > round(4.5)
    [1] 4
    

      数学运算   三角函数、反三角函数

    > sin(pi/6)
    [1] 0.5
    > cos(pi/4)
    [1] 0.7071068
    > tan(pi/3)
    [1] 1.732051
    > asin(0.5)
    [1] 0.5235988
    > acos(0.7071068)
    [1] 0.7853981
    > atan(1.732051)
    [1] 1.047198
    #下面几个都是正态分布的函数,名字以norm结尾,代表“正态分布”
    #前缀   d   概率密度函数
    #     p   概率密度积分函数(从无穷小到x的积分)
    #     q   分位数函数
    #     r   随机数函数(常用于概率仿真)
    
    > dnorm(0)
    [1] 0.3989423
    > pnorm(0)
    [1] 0.5
    > qnorm(0.95)
    [1] 1.644854
    > rnorm(3,5,2) #产生3个平均值为5,标准差为2的正态随机数
    [1] 1.351745 5.329550 2.958539
    

      R 语言除了含有正态分布函数以外还有泊松分布 (pois, Poisson) 等常见分布函数  --------“概率论与数理统计”

     注意:个位数字为4的话round函数

    5、数据类型(数字、逻辑、文本)

      数字常量:一般型、科学计数法

      逻辑类型:常量值只有 TRUE和FALSE   区分大小写。

      对象类型:(向量、列表、矩阵、数组、因子、数据框)

    下面详细介绍详细介绍对象类型

      5.1、向量(Vector)

      最常见的是二维向量,在平面坐标系中必然会用到。(可以看作java中的数组)。

      c()是创造向量的函数。

      向量中的每个元素可以通过下标单独取出。(下标代表的第几个,起始值为1)(java等其他语言中的下标基本上从0开始)

      注意:二维向量和其他维度的向量运算失去数学意义,会出现警告。

    > a=c(1,2,3,6,11,25,64,126)
    > a[4]
    [1] 6
    #通过下标获取单独的值
    > a[1:4]
    [1] 1 2 3 6
    #获取1到4的值
    > a[c(1,3,6)]
    [1]  1  3 25
    #获取1,3,6位置的值
    > a[c(-1,-3)]
    [1]   2   6  11  25 shuchu  64 126
    > 
    #去掉1,3位置的值,并输出向量

      向量支持标量运算

    > c(1.1,1.2,1.3) - 0.5
    [1] 0.6 0.7 0.8
    > a = c(1,2,4)
    > a ^ 2
    [1]  1  4 16
    

      常用的数学运算函数也适用向量运算 sqrt、exp、sort、rev、order

    > a = c(1,3,5,2,4,6)
    > sort(a)
    [1] 1 2 3 4 5 6
    > rev(a)
    [1] 6 4 2 5 3 1
    > order(a)
    [1] 1 4 2 5 3 6
    > a[order(a)]
    [1] 1 2 3 4 5 6
    #order(a) 函数为排序后a向量的下标

      R中有完善的统计函数

      sum、mean(求平均值)、var(方差)、sd(标准差)、min(最小值)、max(最大值)、range(取值范围)(二维向量最大值和最小值)

    > sum(1:10)
    [1] 55
    > sd(1:10)
    [1] 3.02765
    > range(1:10)
    [1]  1 10
    

      向量生成,生成等差数列,可以用seq函数

    > seq(1,9,2)
    [1] 1 3 5 7 9
    > seq(1,8,2)
    [1] 1 3 5 7
    #seq(a,b,c)  从a到b,步长为c
    > seq(1,2,length.out=3) 
    [1] 1.0 1.5 2.0
    # 从m到n数列的长度为3
    > rep(0, 5)
    [1] 0 0 0 0 0
    #重复数字0 5次

      向量中常会用到NA和NULL,介绍与区别

      NA代表的缺失,NULL代表的不存在

      NA缺失就像占位符,代表这里没有一个值,但位置存在

      NULL代表的就是数据不存在

    > length(c(NA, NA, NULL))
    [1] 2
    > c(NA, NA, NULL, NA)
    [1] NA NA NA
    #NULL在R向量中没有任何意义

      which比较罕见的向量逻辑型处理函数

    > c(1,2,3) > 2
    [1] FALSE FALSE  TRUE
    > a = c(1,2,3)>2
    > b = c(1,2,3)
    > print(a)
    [1] FALSE FALSE  TRUE
    > print(b)
    [1] 1 2 3
    > which(a)
    [1] 3
    > b = c(1,2,3,4,5,6)
    > which(a)
    [1] 3
    > a = b >2
    > which(a)
    [1] 3 4 5 6
    
    > vector = c(10,40,78,64,53,62,69,70)
    > print(vector[which(vector >= 60 & vector < 70)])
    [1] 64 62 69
    >
    #从一个线性表中筛选大于等于 60 且小于 70 的数据  
    
    类似的函数还有any()  all() 等
    
    > all(c(TRUE,TRUE,TRUE))
    [1] TRUE
    > all(c(TRUE,FALSE,TRUE))
    [1] FALSE
    > any(c(TRUE,FALSE,FALSE))
    [1] TRUE
    > any(c(FALSE,FALSE,FALSE))
    [1] FALSE
    

      5.2、字符串(常用的对字符串操作的函数)

    > toupper("Hello R")  #转换为大写
    [1] "HELLO R"
    > tolower("Hello R")  #转换为小写
    [1] "hello r"
    > nchar("汉字",type="bytes")   #统计字节长度
    [1] 6
    > nchar("中文",type="byte")  
    [1] 6
    > nchar("汉字",type="char")  #统计字符数
    [1] 2
    > substr("unbelievable",1,5)  #截取字符串,从1到5
    [1] "unbel"
    > substring("unbelievable",5)  #截取字符串,从5到结束
    [1] "lievable"
    > as.numeric("24")  #将字符串转化为数字
    [1] 24
    > as.character(12.34)  #将数字转化为字符串
    [1] "12.34"
    > strsplit("hello_java_learn_R","_")  #分隔符拆分字符串
    [[1]]
    [1] "hello" "java"  "learn" "R"    
    
    > gsub("/","-","2021/08/21")  #替换字符串
    [1] "2021-08-21"
    > 
    

      R支持perl语言格式的正则表达式

      5.2、矩阵

    > vector = c(1,2,3,4,5,6)
    > matrix(vector,2,3)
         [,1] [,2] [,3]
    [1,]    1    3    5
    [2,]    2    4    6
    #初始化内容是由一个向量来传递的,其次要输入矩阵有多少行多少列 > vector = c(1,2,3,4,5) > matrix(vector,2,3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 1 Warning message: In matrix(vector, 2, 3) : 数据长度[5]不是矩阵行数[2]的整倍
    #当初始化向量数量不足时会给出警告 > vector = c(1,2,3,4,5,6) > matrix(vector,2,3,byrow=TRUE) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6
    #按行来初始化矩阵 > matrix(vector,2,3,byrow=FALSE) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
    #按列初始化矩阵 > m1 = matrix(vector,2,3,byrow=FALSE) > m1[1,1] [1] 1 > m1[1,2] [1] 3
    直接访问矩阵的具体元素 > colnames(m1) = c("x","y","z") > rownames(m1) = c("a","b") > m1 x y z a 1 3 5 b 2 4 6 > #设置行列的名称,这个过程通过字符串向量批量完成

      > m1["b",]
      x y z
      2 4 6
      > m1["b","a"]
      Error in m1["b", "a"] : 下标出界
      > m1["a","x"]
      [1] 1
      > m1["b","y"]
      [1] 4

    #通过设定的名称访问具体的元素

      矩阵的运算

    > m1 = matrix(c(1,2,3,4),2,2)
    > m2 = matrix(c(5,6,7,8),2,2)
    > m1%*%m2
         [,1] [,2]
    [1,]   23   31
    [2,]   34   46
    #矩阵的乘法运算 > A = matrix(c(1,2,3,4),2,2) > solve(A) [,1] [,2] [1,] -2 1.5 [2,] 1 -0.5
    #逆矩阵 > A [,1] [,2] [1,] 1 3 [2,] 2 4 > apply(A,1,sum) [1] 4 6
    8 > apply(A,2,sum) [1] 3 7

      

  • 相关阅读:
    [唐胡璐]Selenium技巧- Highlight页面元素
    算法进阶面试题07——求子数组的最大异或和(前缀树)、换钱的方法数(递归改dp最全套路解说)、纸牌博弈、机器人行走问题
    算法进阶面试题06——实现LFU缓存算法、计算带括号的公式、介绍和实现跳表结构
    算法进阶面试题05——树形dp解决步骤、返回最大搜索二叉子树的大小、二叉树最远两节点的距离、晚会最大活跃度、手撕缓存结构LRU
    算法进阶面试题04——平衡二叉搜索树、AVL/红黑/SB树、删除和调整平衡的方法、输出大楼轮廓、累加和等于num的最长数组、滴滴Xor
    算法进阶面试题03——构造数组的MaxTree、最大子矩阵的大小、2017京东环形烽火台问题、介绍Morris遍历并实现前序/中序/后序
    算法进阶面试题02——BFPRT算法、找出最大/小的K个数、双向队列、生成窗口最大值数组、最大值减最小值小于或等于num的子数组数量、介绍单调栈结构(找出临近的最大数)
    算法进阶面试题01——KMP算法详解、输出含两次原子串的最短串、判断T1是否包含T2子树、Manacher算法详解、使字符串成为最短回文串
    算法初级面试题08——递归和动态规划的精髓、阶乘、汉诺塔、子序列和全排列、母牛问题、逆序栈、最小的路径和、数组累加成指定整数、背包问题
    算法初级面试题07——前缀树应用、介绍和证明贪心策略、拼接字符串得到最低字典序、切金条问题、项目收益最大化问题、随时取中位数、宣讲会安排
  • 原文地址:https://www.cnblogs.com/torchstar/p/15115521.html
Copyright © 2020-2023  润新知