zoukankan      html  css  js  c++  java
  • R 语言

    前置

    想随便了解一下 R 语言,结果被迫入坑,一开始就被整懵了,R 三件套:R、Rtools、RStudio 的配置环境让我想起了从前配置 JAVA 的恐惧。不过后面可能会接触到 R markdown,可能对网站建设有帮助,不亏,然后可能也会用 VScode 搞 R,毕竟 RStudio 才刚碰,没有什么感情

    理解的背景

    R 语言是统计学家开发的,出生之初就决定了它的使命是统计计算和数据可视化,这算是 R 语言核心功能的两个大方向

    对于这两个方向而言

    统计计算的学习。基础都在课堂理论与专业背景上,说实话,R 语言只是提供了一个实现的平台而已,它并不该改变或者创造新的理论、模型

    数据可视化方向。则稍有不同,数据可视化确实并不十分依赖数学,但是他高度依赖图形语法(分别是基础图形语法、高级图形语法、lattice 语法、ggplot2 语法),依赖可视化视觉呈现理念

    关于R语言学习技能路径:

    通用技能学习:

    基础:数据结构、变量类型、数据导入/导出、数据合并追加、长宽转换、数据索引、切片、聚合

    进阶:正则表达式、合并与分列、匹配与替换、缺失值插补、去重与排序,控制流:循环与判断

    专用技能学习:

    统计与分析:课本书籍

    数据可视化:ggplot2 语法 + 设计 + 审美 + 创意

    R 语言的优劣势是什么?

    下载与配置环境

    R

    https://mirrors.tuna.tsinghua.edu.cn/CRAN/index.html

    Rtools40

    https://mirrors.tuna.tsinghua.edu.cn/CRAN/index.html

    RStudio

    https://www.rstudio.com/products/rstudio/download/#download

    配置

    由于配置 Rtools 必须要用 RStudio,所以我才下载了它

    配置 R 参考文章:cmd下的R语言环境变量配置

    # 现在环境变量中配置下面几条
    R_HOME=D:RR-4.1.1
    PATH=%R_HOME%in
    

    配置 Rtools40 参考文章:官网RTools40的环境配置

    # 现在环境变量中配置下面两条
    RTOOLS40_HOME=D:Rtools
    tools40
    PATH=%RTOOLS40_HOME%usrin
    
    # 在 RStudio 中运行下面命令
    file.edit('~/.Renviron')
    
    # 将下面代码写入打开的文件中
    writeLines('PATH="${RTOOLS40_HOME}\usr\bin;${PATH}"', con = "~/.Renviron")
    
    # 重启
    
    # 在 RStudio 中运行下面命令
    system('where make')
    
    # 若显示下面回应,则说明成功
    D:Rtools
    tools40usrinmake.exe
    

    配置 Vscode 中 R 的插件

    # 在 RStudio 中运行下面命令
    install.packages("languageserver")
    

    下面是 Vscode 推荐下载的插件

    直接在 Vscode 插件区下载:radian、R Debugger

    # 在 RStudio 中运行命令下载
    install.packages("httpgd")
    

    检测 Rtools 与 R

    # 在 cmd 输入以下命令
    r
    rscript
    
    # 不知道为什么在 powershell 输入 r 运行不了,但 r.exe 可以运行
    

    配置环境如下:

    基础学习(混乱版)

    R 官方文档

    变量赋值

    feature:

    1. 有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成
    2. 最新版本的 R 语言的赋值可以使用左箭头 <-、等号 = 、右箭头 -> 赋值
    # 正常
    myString <- "Hello, World!"
    print ( myString )
    # Hello, World!
    
    # feature 1
    var.1 = c(0,1,2,3) 
    print(var.1)
    # 0 1 2 3
    

    变量处理

    # 查看变量
    print(ls())
    # "var.1" "var.2" "var.3"
    
    # 删除变量
    rm(var.3)
    

    cat() 函数

    cat(1, "加", 1, "等于", 2, '
    ')
    # 1 加 1 等于 2
    
    # 输出内容到文件
    cat("ACMICPC", file="C:Users14805Desktopacm.txt")
    

    sink() 函数

    feature:

    1. append 参数是追加写入,否找覆盖
    2. split 属性是依然保留控制台的输出,否找不显示
    sink("r_test.txt", split=TRUE)  # 控制台同样输出
    for (i in 1:5)
        print(i)
    sink()   # 取消输出到文件
    # 1
    # 2
    # 3
    # 4
    # 5
    

    注释

    # 单行注释就是 #
    
    "
    多行注释就是双引号
    "
    

    运算符

    # 1 到 10 的向量
    v <- 1:10
    print(v)
    
    # 判断数字是否在向量 v 中
    v1 <- 3
    v2 <- 15
    print(v1 %in% v)
    print(v2 %in% v)
    
    # 数学函数
    sqrt(4)
    # 2
    exp(1)
    # 2.718282
    exp(2)
    # 7.389056
    log(2,4)
    # 0.5
    log10(10000)
    # 4
    
    round(1.5)
    # 2
    round(2.5)
    # 2
    round(3.5)
    # 4
    round(4.5)
    # 4
    # round 函数当取整位是偶数的时候,五也会被舍去
    

    数据类型(太多了,只挑重点写)

    # 向量
    # c() 是一个创造向量的函数
    
    > a[c(1, 3, 5)] # 取出第 1, 3, 5 项
    [1] 10 30 50
    > a[c(-1, -5)] # 去掉第 1 和第 5 项
    [1] 20 30 40
    
    > seq(1, 9, 2)
    [1] 1 3 5 7 9
    
    "
    NA 代表的是 缺失,NULL 代表的是 不存在
    NA 缺失就像占位符,代表这里没有一个值,但位置存在
    NULL 代表的就是数据不存在
    "
    
    > length(c(NA, NA, NULL))
    [1] 2
    > c(NA, NA, NULL, NA)
    [1] NA NA NA
    
    # 逻辑型
    # 没什么
    
    # 矩阵
    
    > m1 = matrix(c(1, 2), 1, 2)
    > m2 = matrix(c(3, 4), 2, 1)
    > m1 %*% m2
         [,1]
    [1,]   11
    

    判断语句

    # if / else /else if
    # 没什么
    
    # switch
    x <- switch(
       3,
       "google",
       "runoob",
       "taobao",
       "weibo"
    )
    print(x)
    [1] "taobao"
    
    you.like<-"runoob"
    switch(you.like, google="www.google.com", runoob = "www.runoob.com", taobao = "www.taobao.com")
    [1] "www.runoob.com"
    
    > x <- switch(4,"google","runoob","taobao")
    > x
    NULL
    

    循环

    # repeat
    v <- c("Google","Runoob")
    cnt <- 2
    
    repeat {
       print(v)
       cnt <- cnt+1
       
       if(cnt > 5) {
          break
       }
    }
    [1] "Google" "Runoob"
    [1] "Google" "Runoob"
    [1] "Google" "Runoob"
    [1] "Google" "Runoob"
    
    # while
    v <- c("Google","Runoob")
    cnt <- 2
    
    while (cnt < 7) {
       print(v)
       cnt = cnt + 1
    }
    [1] "Google" "Runoob"
    [1] "Google" "Runoob"
    [1] "Google" "Runoob"
    [1] "Google" "Runoob"
    [1] "Google" "Runoob"
    
    # for
    v <- LETTERS[1:4]
    for ( i in v) {
       print(i)
    }
    [1] "A"
    [1] "B"
    [1] "C"
    [1] "D"
    
    # next
    v <- LETTERS[1:6]
    for ( i in v) {
       
       if (i == "D") {  # D 不会输出,跳过这次循环,进入下一次
          next
       }
       print(i)
    }
    [1] "A"
    [1] "B"
    [1] "C"
    [1] "E"
    [1] "F"
    

    函数

    # 通用公式
    "
    function_name <- function(arg_1, arg_2, ...) {
        // 函数体
    }
    "
    
    # 内置函数
    # 输出  32 到 44 到的所有数字
    print(seq(32,44))
    
    # 计算两个数到平均数
    print(mean(25:82))
    
    # 计算 41 到 68 所有数字之和
    print(sum(41:68))
    
    [1] 32 33 34 35 36 37 38 39 40 41 42 43 44
    [1] 53.5
    [1] 1526
    
    # 函数还可以传入函数,格式就是将函数名传入即可
    

    字符串

    c <- "双引号字符串中可以包含单引号(') "
    print(c)
    
    d <- '单引号字符串中可以包含双引号(") '
    print(d)
    

    文件脚本

    feature:

    后缀为 .R

    后话

    整体感觉和 python 无异,基础都一样,难的地方还没开始学,以后再说...

    既然适用于统计和绘制,感觉 python 完全可以替代,但是语法虽然差不多,但是社区开源的包不同嘛,所以条件适宜的话,还是两个都学吧,毕竟这些都只是工具而不是思想~

    预学习

    RMarkdown:基础语法和用法blogdown 网站

    喜欢划水摸鱼的废人
  • 相关阅读:
    《Android深入透析》之广播(Broadcast)
    曾经的程序员-《30岁的程序员,你迷惘了吗?》
    30岁的程序员,你迷惘了吗?
    Android: 详解触摸事件如何传递
    关于HTML5服务器发送事件(SSE)
    Android: 在onCreate()中获得对象尺寸
    jxl教程图文详解
    相当牛X的java版星际游戏
    程序员的无奈(十二):终于获得了投资
    图览各编程语言中敲击最多的键
  • 原文地址:https://www.cnblogs.com/CourserLi/p/15424421.html
Copyright © 2011-2022 走看看