• R 复习 菜鸟教程


    R语言老师说R好就业,学就完了

    基础语法

    cat()可以拼接函数

    > cat(1, "加", 1, "等于", 2, '\n')
    11 等于 2
    
    • 1
    • 2

    sink():重定向

    sink("r_test.txt", split=TRUE)  # 控制台同样输出
    for (i in 1:5) 
        print(i)
    sink()   # 取消输出到文件
    
    sink("r_test.txt", append=TRUE) # 控制台不输出,追加写入文件
    print("RUNOOB")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 当前工作目录
    print(getwd())
    
    # 设置当前工作目录
    setwd("/Users/runoob/runoob-test2")
    
    # 查看当前工作目录
    print(getwd())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    基础运算

    %%	整除求余
    %/%	整除
    
    • 1
    • 2
    %in%	用于判断元素是否在向量里,返回布尔值,有的话返回 TRUE,没有返回 FALSE%*%	    用于矩阵与它转置的矩阵相乘。
    
    # 1 到 10 的向量
    v <- 1:10
    print(v) 
    
    # 判断数字是否在向量 v 中
    v1 <- 3
    v2 <- 15
    print(v1 %in% v) 
    print(v2 %in% v) 
    
    # 矩阵与它转置的矩阵相乘
    M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)
    t = M %*% t(M)
    print(t)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    数据类型

    变量按对象类型来分是以下 6 种:
    向量(vector)
    列表(list)
    矩阵(matrix)
    数组(array)
    因子(factor)
    数据框(data.frame)

    seq(data,from,to,len):等差数列
    rep():重复

    NA:占位符

    > toupper("Runoob") # 转换为大写
    [1] "RUNOOB"
    > tolower("Runoob") # 转换为小写
    [1] "runoob"
    > nchar("中文", type="bytes") # 统计字节长度
    [1] 4
    > nchar("中文", type="char") # 总计字符数量
    [1] 2
    > substr("123456789", 1, 5) # 截取字符串,从 1 到 5
    [1] "12345"
    > substring("1234567890", 5) # 截取字符串,从 5 到结束
    [1] "567890"
    > as.numeric("12") # 将字符串转换为数字
    [1] 12
    > as.character(12.34) # 将数字转换为字符串
    [1] "12.34"
    > strsplit("2019;10;1", ";") # 分隔符拆分字符串
    [[1]]
    [1] "2019" "10"   "1"
    > gsub("/", "-", "2019/10/1") # 替换字符串
    [1] "2019-10-1"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    > (A = matrix(c(1, 3, 2, 4), 2, 2))
         [,1] [,2]
    [1,]    1    2
    [2,]    3    4
    > apply(A, 1, sum) # 第二个参数为 1 按行操作,用 sum() 函数
    [1] 3 7
    > apply(A, 2, sum) # 第二个参数为 2 按列操作
    [1] 4 6
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    判断语句

    R 语言提供了以下类型的判断语句:
    if 语句
    if…else 语句
    switch 语句

    switch 没有默认参数可用。

    循环

    R 语言提供的循环类型有:
    repeat 循环 用 break
    测试+ while 循环
    for 循环 +测试

    R 语言提供的循环控制语句有:
    break 语句
    Next 语句 用于 switch

    函数

    function_name <- function(arg_1, arg_2, ...) {
        # 函数体
        # 执行的代码块
        return(output)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    str():显示对象的结构和内容摘要

    字符串

    paste(..., sep = " ", collapse = NULL):合并字符串
    
    a <- "Google"
    b <- 'Runoob'
    c <- "Taobao"
    
    print(paste(a,b,c))
    
    print(paste(a,b,c, sep = "-"))
    
    print(paste(letters[1:6],1:6, sep = "", collapse = "="))
    paste(letters[1:6],1:6, collapse = ".")
    
    输出结果:
    [1] "Google Runoob Taobao"
    [1] "Google-Runoob-Taobao"
    [1] "a1=b2=c3=d4=e5=f6"
    [1] "a 1.b 2.c 3.d 4.e 5.f 6"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    列表

    list_data <- list("runoob", "google", c(11,22,33), 123, 51.23, 119.1)
    print(list_data)
    
    输出结果:
    [[1]]
    [1] "runoob"
    
    [[2]]
    [1] "google"
    
    [[3]]
    [1] 11 22 33
    
    [[4]]
    [1] 123
    
    [[5]]
    [1] 51.23
    
    [[6]]
    [1] 119.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    # 列表包含向量、矩阵、列表
    list_data <- list(c("Google","Runoob","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
       list("runoob",12.3))
    
    # 给列表元素设置名字
    names(list_data) <- c("Sites", "Numbers", "Lists")
    
    # 显示列表
    print(list_data)
    
    输出结果:
    $Sites
    [1] "Google" "Runoob" "Taobao"
    
    $Numbers
         [,1] [,2] [,3]
    [1,]    1    3    5
    [2,]    2    4    6
    
    $Lists
    $Lists[[1]]
    [1] "runoob"
    
    $Lists[[2]]
    [1] 12.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    # 列表包含向量、矩阵、列表
    list_data <- list(c("Google","Runoob","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
       list("runoob",12.3))
    
    # 给列表元素设置名字
    names(list_data) <- c("Sites", "Numbers", "Lists")
    
    # 添加元素
    list_data[4] <- "新元素"
    print(list_data[4])
    
    # 删除元素
    list_data[4] <- NULL
    
    # 删除后输出为 NULL
    print(list_data[4])
    
    # 更新元素
    list_data[3] <- "我替换来第三个元素"
    print(list_data[3])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    # 创建两个列表
    list1 <- list(1,2,3)
    list2 <- list("Google","Runoob","Taobao")
    
    # 合并列表
    merged.list <- c(list1,list2)
    
    # 显示合并后的列表
    print(merged.list)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    # 创建列表
    list1 <- list(1:5)
    print(list1)
    
    list2 <-list(10:14)
    print(list2)
    
    # 转换为向量
    v1 <- unlist(list1)
    v2 <- unlist(list2)
    
    print(v1)
    print(v2)
    
    # 两个向量相加
    result <- v1+v2
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    矩阵

    matrix(data = , nrow = , ncol = , byrow = FALSE,dimnames = NULL)
    
    data 向量,矩阵的数据
    nrow 行数
    ncol 列数
    byrow 逻辑值,为 FALSE 按列排列,为 TRUE 按行排列
    dimname 设置行和列的名称
    
    # byrow 为 TRUE 元素按行排列
    M <- matrix(c(3:14), nrow = 4, byrow = TRUE)
    print(M)
    
    # Ebyrow 为 FALSE 元素按列排列
    N <- matrix(c(3:14), nrow = 4, byrow = FALSE)
    print(N)
    
    # 定义行和列的名称
    rownames = c("row1", "row2", "row3", "row4")
    colnames = c("col1", "col2", "col3")
    
    P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
    print(P)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    数组

    array(data = NA, dim = length(data), dimnames = NULL)
    
    data - 指定数组的数据源,可以是一个向量、矩阵或列表。
    dim - 指定数组的维度,可以是一个整数向量或一个表示维度的元组,默认是一维数组。例如,dim = c(2, 3, 4) 表示创建一个 2x3x4 的三维数组。
    dimnames - 可选参数,用于指定数组每个维度的名称,可以是一个包含维度名称的列表。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    apply(X, MARGIN, FUN, ...)
    
    X:要应用函数的数组或矩阵。
    MARGIN:指定应用函数的维度,可以是1表示行,2表示列,或者c(1, 2)表示同时应用于行和列。
    FUN:要应用的函数,可以是内置函数(如mean、sum等)或自定义函数。
    
    # 创建两个不同长度的向量
    vector1 <- c(5,9,3)
    vector2 <- c(10,11,12,13,14,15)
    
    # 创建数组
    new.array <- array(c(vector1,vector2),dim = c(3,3,2))
    print(new.array)
    
    # 计算数组中所有矩阵第一行的数字之和
    result <- apply(new.array, c(1), sum)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    数据重塑

    cast():函数用于对合并对数据框进行还原
    dcast():返回数据框
    acast():返回一个向量/矩阵/数组。

    .libPaths():查看 R 包的安装目录

    library():查看已安装的包

    install.packages(“要安装的包名”)

    读取文件

    data <- read.csv("sites.csv", encoding="UTF-8")
    
    # likes 为 222 的数据
    retval <- subset(data, likes == 222)
    
    # 写入新的文件
    write.csv(retval,"runoob.csv")
    newdata <- read.csv("runoob.csv")
    print(newdata)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    summary():获取关系模型的概要

    predict(object, newdata)
    
    object - lm() 函数创建的公式。
    newdata - 要预测的值。
    
    • 1
    • 2
    • 3
    • 4

    实例

    通过自定义一个函数来查找向量中重复次数最多的元素
    
    # 创建向量
    getmode <- function(v) {
       uniqv <- unique(v)
       uniqv[which.max(tabulate(match(v, uniqv)))]
    }
    
    # 数字向量
    v <- c(2,1,2,3,1,2,3,4,1,5,5,3,2,3)
    
    # 计算结果
    result <- getmode(v)
    print(result)
    
    # 字符串向量
    charv <- c("google","runoob","taobao","runoob","runoob")
    
    # 计算结果
    result <- getmode(charv)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    # 创建向量
    x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
    # 计算平均值
    result.mean <-  mean(x,trim = 0.3)//去掉首尾各 3 个元素
    result.mean2 <- mean(c(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17))
    print(result.mean)
    print(result.mean2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    总结

    我知道的和我觉得不是重点的我就没写,建议搭配前面两篇文章和课本一块使用

  • 相关阅读:
    QT5串口编程——编写简单的上位机
    神经网络中的数值特征Embedding化方法
    视频降噪综述
    敏捷开发失败的五个原因以及解决方案
    项目中常用工具包
    【C语言】指针查漏补缺
    嵌入式复习题
    EureKa详解:微服务发现与注册的利器
    【Rust 基础篇】Rust动态大小类型:理解动态大小类型与编写安全的代码
    说几句得罪人的大实话
  • 原文地址:https://blog.csdn.net/m0_64799907/article/details/134236750