R语言基础 | 安徽某高校《统计建模与R软件》期末复习

第一节 数字、字符与向量

1.1 向量的赋值

c<-(1,2,3,4,5)

1.2 向量的运算

对于向量,我们可以直接对其作加(+),减(-),乘(*),除(/),乘方(^{}),整数除法(%/%),求余(%%)运算,其含义就是对向量的每一个元素进行运算。

1.3 向量运算函数

    min(x) # 返回最小值max(x) # 返回最大值range(x) # 返回最小值和最大值which.min(x) # 返回最小值的下标which.max(x) # 返回最大值的下标sum(x) # 元素求和prod(x) # 元素连乘length(x) # 向量长度median(x) # 中位数mean(x) # 均值var(x) # 方差sd(x) # 标准差sort(x) # 排序order(x) # 返回排序后的索引

1.4 逻辑向量

逻辑向量是一种用于存储逻辑(布尔)值的数据结构。逻辑向量可以包含两种可能的值:TRUE(真)和FALSE(假),用来表示逻辑条件的结果或逻辑操作的输出。

    all(c(1,2,3)>2) # 返回FALSEall(c(1,2,3)>2) # 返回TRUE
x <- c(1, 2, 3, 4, 5)
logical_vector <- ifelse(x > 3, TRUE, FALSE)
# logical_vector 包含 FALSE FALSE FALSE TRUE TRUE

1.5 生成有规律的序列

    # 生成等差数列a:b# 等间隔函数s1<-seq(-5,5,by=2) # 生成间隔为2,从-5到5的等间隔序列# 重复函数rep()s1<-rep(x,times=3)

1.6 缺失数值的操作

    z<-c(1:3,NA) # 用NA表示缺失的数据is.na(z) # 逐个检测是否为缺失数据,TRUE则表示缺失z[is.na(z)]<-0 # 将缺失数据改成0is.nan() # 检测数据是否为NaNis.finite() # 检测数据是否有限(非NaN非无穷大)  

补充:NA(Not Available)和NaN(Not a Number)是两个不同的概念,前者表示缺失值或不可用值,后者表示非有效数值,比如\frac{0}{0}\sqrt{-2}就是NaN。

1.7 字符型向量

字符型向量是R语言中的一种数据结构,用于存储文本数据或字符串。字符型向量可以包含任何文本字符,如字母、数字、符号等,并且可以包含不同长度的字符串。

    k<-c("jerry","lin")

paste()函数用于将多个元素(字符向量、数值、逻辑值等)组合成一个字符串,可以指定分隔符来连接这些元素。例如:

# 简单的连接字符型向量
fruits <- c("apple", "banana", "cherry")
result <- paste(fruits, collapse = ", ")
# result 包含 "apple, banana, cherry"# 使用不同的分隔符
numbers <- c(1, 2, 3, 4)
result <- paste(numbers, sep = "-")
# result 包含 "1-2-3-4"
result <- paste("x",numbers,sep = "-")
# result 包含 "x-1" "x-2" "x-3" "x-4"# 连接多个对象
name <- "John"
age <- 30
result <- paste("My name is", name, "and I am", age, "years old.")
# result 包含 "My name is John and I am 30 years old."

1.8 复数向量

# 创建一个复数
z <- complex(real = 3, imaginary = 4)# 计算实部
real_part <- Re(z)
cat("Real part:", real_part, "\n")# 计算虚部
imaginary_part <- Im(z)
cat("Imaginary part:", imaginary_part, "\n")# 计算模
modulus <- Mod(z)
cat("Modulus:", modulus, "\n")# 计算幅角(以弧度为单位)
argument <- Arg(z)
cat("Argument (in radians):", argument, "\n")

1.9 下标

1.9.1 下标的顺序访问

    x<-(1,2,3)x[2] # 访问向量x的第二个元素

1.9.2 下标的逻辑访问

    x<-c(1,2,3)x[x<3] # 访问向量中所有小于3的元素

1.9.3 下标的名称访问

# 创建一个有命名元素的向量
fruit_prices <- c(apple = 1.2, banana = 0.8, cherry = 2.5, orange = 1.0)# 访问向量的元素通过名字
apple_price <- fruit_prices["apple"]
# 也可以使用$符号来访问
banana_price <- fruit_prices$banana

第二节 对象

2.1 对象的分类

可以将对象分为两类:单纯对象(atomic vectors)和复合对象(lists)。

  • 单纯对象是R中的基本数据结构,它们包含具有相同数据类型的元素。
  • R中常见的单纯对象类型包括:
    • 向量(Vectors):包括数值向量、字符向量、逻辑向量、复数向量等,每个向量的元素都是相同的数据类型。
    • 因子(Factors):用于表示分类数据,每个因子的元素属于一个有限的类别。
    • 整数向量(Integer Vectors):包括整数类型的向量。

复合对象(Lists):

  • 复合对象是R中的数据结构,它们可以包含不同数据类型的元素,因此被称为“复合”对象。
  • 复合对象通常用于组织和存储各种数据类型的数据,可以包含向量、数据框、单纯对象、其他复合对象等。
  • 列表(List)是R中最常见的复合对象类型,它允许你创建包含不同类型的元素的数据结构。

2.2 对象的基本属性

对象具有两个基本属性:类型(Mode)属性和长度(Length)属性。这些属性对于操作和分析数据非常重要。可以使用不同的函数来检测对象的类型和长度,以便更好地理解和操作数据。

对象类型(Mode)属性:

  • 你可以使用 mode() 函数来获取对象的类型属性。
  • 也可以使用 is.*() 函数系列来检测对象的类型,这些函数返回逻辑值(TRUE或FALSE),用于判断对象是否属于特定类型。
  • 例如,is.numeric() 检测对象是否为数值类型,is.character() 检测对象是否为字符类型,is.data.frame() 检测对象是否为数据框等。

对象长度(Length)属性:

  • 你可以使用 length() 函数来获取对象的长度属性,它告诉你对象中包含的元素数量。
  • 对于复合对象,比如列表或数据框,length() 返回的是元素的数量,而不是元素的总数。

2.3 强制类型转换

你可以使用 as. 开头的一系列函数来进行类型转换,以将一个对象强制转换为另一种数据类型。这些函数通常用于将对象从一种数据类型转换为另一种,以满足特定的计算或分析需求。例如:

x <- "123"
x_numeric <- as.numeric(x)y <- 5.7
y_integer <- as.integer(y)z <- 123
z_character <- as.character(z)a <- 0
a_logical <- as.logical(a)b <- c("red", "green", "blue", "red")
b_factor <- as.factor(b)

2.4 attributes和attr函数

你可以使用 attributes(object) 函数来获取对象 object 的各个特殊属性组成的列表,但这个列表通常不包括固有属性 modelength。这个函数可以用于检查对象的附加信息和属性。

# 创建一个向量并为其添加特殊属性
x <- c(1, 2, 3, 4, 5)
attr(x, "description") <- "This is a numeric vector"# 获取对象的特殊属性
attr_list <- attributes(x)
print(attr_list)

在这个示例中,我们首先创建了一个名为 x 的数值向量,并使用 attr() 函数为它添加了一个特殊属性 "description"。然后,我们使用 attributes() 函数来获取 x 的特殊属性列表。

2.5 自动伸长和强制压缩

在R语言中,允许对超出对象长度的下标进行赋值,这个特性通常被称为"自动伸长"。当你使用超出对象长度的下标进行赋值时,R会自动扩展对象的长度,并将未赋值的元素初始化为缺失值(NA)。这可以方便地向对象添加新元素或修改现有元素。我们也可以通过直接修改length值对对象进行压缩。例如:

# 创建一个向量
x <- c(1, 2, 3)# 使用超出对象长度的下标赋值(自动伸长)
x[5] <- 6
# 现在向量x变为 1 2 3 NA 6# 缩短对象长度
x <- x[1:3]
# 向量x变为 1 2 3# 直接给长度赋值
length(x) <- 2
# 向量x变为 1 2

2.6 class属性

在R语言中,可以使用特殊的class属性来支持面向对象的编程风格,这允许你定义自己的对象类,并为这些类定义不同的方法。通过给对象设置不同的class属性,你可以使通用函数(如print()plot()等)根据对象的类别执行不同的操作,实现多态性。

第三节 因子

3.1 变量的类别

3.1.1 区间变量

区间变量是一种连续的数值变量,可以进行各种数学运算,如求和、平均值、差值等。
它们可以用数值来表示,并且数值之间具有加减乘除的意义。
区间变量通常表示一定范围内的度量,如温度、年龄等。

3.1.2 名义变量

名义变量是一种离散的变量,可以用数值或字符型值来表示,但具体数值没有数学运算的意义。
名义变量主要用于分类或计数,用来表示不同的类别或类别之间的差异。
例子包括性别、省份、职业等。

3.1.3 有序变量

有序变量是一种离散的变量,可以用数值或字符型值来表示,但具有顺序或排序的含义。
虽然有序变量的数值有意义,但仅限于表示它们的相对顺序,而不支持加减乘除等数学运算。
有序变量通常用于表示等级、名次、满意度等具有明显排序关系的情况,如班级、名次等。

3.2 factor、levels、table函数

    sex<-c("M","F","M","M","F")sexf<-factor(sex) # 创建因子sexl<-levels(sexf) # 得到因子的水平,即不同的类别标签sext<-table(sexf) # 统计频数

3.3 apply和tapply函数

3.3.1 apply函数

  • apply 函数用于在矩阵或数组的行或列上执行函数操作。它可以对数据的行或列进行操作,而不仅仅是单一的向量。
  • apply 函数的语法为:apply(X, MARGIN, FUN),其中:
    • X 是要操作的矩阵或数组。
    • MARGIN 指定了要操作的维度,通常为1表示行,2表示列,或者其他维度的索引。
    • FUN 是要应用的函数,通常是自定义的或内置的R函数。

示例:

# 创建一个矩阵
mat <- matrix(1:12, nrow = 3, ncol = 4)# 使用apply函数计算每列的和
col_sums <- apply(mat, 2, sum)

3.3.2 tapply函数

  • tapply 函数用于按照一个或多个因子变量对数据进行拆分(分组),然后在每个分组上应用一个函数,并将结果整合成一个列表或向量。
  • tapply 函数的语法为:tapply(X, INDEX, FUN),其中:
    • X 是要操作的数据向量。
    • INDEX 是一个或多个因子变量,用于定义数据的分组。
    • FUN 是要应用于每个分组的函数。

示例:

# 创建一个数据框
df <- data.frame(gender = c("M", "F", "M", "F", "M"),score = c(80, 85, 78, 92, 88)
)# 使用tapply函数按性别分组计算平均分
avg_score_by_gender <- tapply(df$score, df$gender, mean)

3.4 gl函数

gl()函数是用于创建因子的函数,特别适用于生成重复的因子水平:

gl(n, k, labels = NULL, length = n * k, ordered = FALSE)
  • n:一个正整数,表示每个水平要重复的次数。
  • k:一个正整数,表示总的水平数。
  • labels:一个字符向量,包含了水平的标签。如果未指定,将使用默认标签。
  • length:生成的因子向量的长度。
  • ordered:一个逻辑值,表示生成的因子是否应该是有序的,默认为FALSE。

第四节 多维数组和矩阵

4.1 数组和矩阵的生成

4.1.1 向量直接生成

向量只有定义了维数向量(dim属性)后才能被看作是数组,⽐如:

    z<-1:12dim(z)<-c(3,4)

注意:矩阵的元素是按列存放的。

4.1.2 array函数

array() 函数是R语言中用于创建多维数组的函数。多维数组是一种数据结构,可以存储多个维度的数据。array() 函数允许你指定数据、维度和维度名称,以便创建具有特定结构的数组。

data <- c(1, 2, 3, 4, 5, 6)
# 创建一个二维数组,并指定维度和维度名称
arr <- array(data, dim = c(2, 3), dimnames = list(c("Row1", "Row2"), c("Col1", "Col2", "Col3")))
  • data:要存储在数组中的数据,通常是一个向量或矩阵。
  • dim:一个整数向量,指定了数组的维度,它定义了数组的形状和结构。
  • dimnames:一个包含行和列名称的列表,用于指定数组的维度名称。

4.1.3 matrix函数

    matrix(data, nrow = , ncol = , byrow = FALSE, dimnames = NULL)
  • data:用于填充矩阵的数据,可以是向量或其他可转换为矩阵的数据结构。
  • nrow:矩阵的行数。
  • ncol:矩阵的列数。
  • byrow:一个逻辑值,用于指定数据填充矩阵的方式。如果为TRUE,则按行填充;如果为FALSE(默认值),则按列填充。
  • dimnames:一个包含行名和列名的列表,用于指定矩阵的行名和列名。

4.2 数组的下标

数组与向量⼀样,可以对数组中的某些元素进⾏访问,或进⾏运算:

# 选择下标为(1, 2, 1)的元素
a[1, 2, 1]# 选择下标为(1, 2, 1)和(1, 3, 1)的元素
a[1, 2:3, 1]# 选择所有第一维下标为1的元素
a[1,,]# 选择整个数组(返回整个数组的副本)
a[]# 对数组的数据向量取子集,选择从第三个元素到第十个元素
a[3:10]

4.3 矩阵的运算

# 转置运算
t(A)# 求方阵的行列式
det(A)# 计算向量x和y的内积
x %*% y# 计算向量x和y的内积(另一种方式)
crossprod(x, y)# 计算向量x和y的外积
x %o% y# 计算向量x和y的外积(等价于x %*% t(y))
tcrossprod(x, y)# 获取矩阵A的对角线元素(若A为向量,则创建对角阵)
diag(A)# 解线性方程组Ax=b
solve(A, b)# 求矩阵A的特征值和特征向量
eigen(A)# 求矩阵A的秩
rank(A)# 对矩阵A进行奇异值分解
svd(A)# 对矩阵A进行QR分解
qr(A)

第五节 列表与数据框

5.1 列表

列表是一种复合数据结构,可以包含多种不同类型的数据,包括向量、矩阵、数据框、函数等。列表的主要特点如下:

  1. 多类型元素:列表可以包含不同数据类型的元素,因此它是一种松散结构,允许在同一个列表中存储不同类型的数据。

  2. 使用列表索引:列表的元素可以使用索引来访问,每个元素可以有一个名称(标签)或使用数字索引进行访问。

  3. 创建列表:可以使用 list() 函数来创建列表。例如,通过以下方式创建一个包含不同类型元素的列表:

    my_list <- list(a = 1, b = "text", c = c(1, 2, 3))
    

         这将创建一个名为 my_list 的列表,其中包含了整数、字符和数值向量等不同类型的元素。

  1. 访问列表元素:可以使用 $ 运算符或 [[ ]] 来访问列表的元素。例如,要访问列表中的元素可以使用以下方式:使用 $ 运算符:my_list$amy_list$b;使用 [[ ]] 运算符:my_list[["c"]]

5.2 数据框

数据框是一种二维数据结构,类似于表格或电子表格,它是R中最常用的数据结构之一。数据框的主要特点如下:

  1. 二维结构:数据框包含行和列,可以看作是一个二维表格,其中每一列可以包含不同数据类型的数据,但每一列的数据类型必须一致。

  2. 列名和行名:数据框的列(变量)有名称,可以通过列名来访问数据。同时,数据框的行可以有行名,也可以通过行名来访问数据。

  3. 创建数据框:可以使用 data.frame() 函数来创建数据框。例如,通过以下方式创建一个包含不同类型数据的数据框:

    my_df <- data.frame(ID = 1:3, Name = c("Alice", "Bob", "Charlie"))
    

    这将创建一个名为 my_df 的数据框,其中包含了整数和字符数据类型的列("ID" 和 "Name")。

  4. 访问数据框元素:可以使用 $ 运算符或 [ ] 来访问数据框的列或元素。例如,要访问数据框中的列,可以使用以下方式:使用 $ 运算符:my_df$Name;使用 [ ] 运算符:my_df[1, 2]

(个人总结,如有谬误或需要改进之处欢迎联系作者)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/241549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【shell脚本实战学习笔记】#1

shell脚本实战学习笔记#1 脚本编写场景需求&#xff1a; 编写一个比较数据大小的shell脚本&#xff0c;要求判断用户只能输入两位数字&#xff0c;不能是字符或其他特殊字符&#xff1b;并且在shell脚本中需要用到函数来控制执行顺序。 知识点&#xff1a;shell函数&#xff…

科研学习|论文解读——面向电商内容安全风险管控的协同过滤推荐算法研究

【论文完整内容详见知网链接】&#xff1a; 面向电商内容安全风险管控的协同过滤推荐算法研究 - 中国知网 (cnki.net) 面向电商内容安全风险管控的协同过滤推荐算法研究* 摘 要&#xff1a;[目的/意义]随着电商平台商家入驻要求降低以及商品上线审核流程简化&#xff0c;内容安…

Centos安装vsftpd:centos配置vsftpd,ftp报200和227错误

一、centos下载安装vsftpd&#xff08;root权限&#xff09; 1、下载安装 yum -y install vsftpd 2、vsftpd的配置文件 /etc/vsftpd.conf 3、备份原来的配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup 4、修改配置文件如下&#xff1a;vi /etc/vsftpd.conf …

体验一下 CodeGPT 插件

体验一下 CodeGPT 插件 0. 背景1. CodeGPT 插件安装2. CodeGPT 插件基本配置3. (可选)CodeGPT 插件预制提示词原始配置(英文)4. CodeGPT 插件预制提示词配置(中文)5. 简单验证一下 0. 背景 看到B站Up主 “wwwzhouhui” 一个关于 CodeGPT 的视频&#xff0c;感觉挺有意思&#…

SpringMVC:整合 SSM 中篇

文章目录 SpringMVC - 04整合 SSM 中篇一、优化二、总结三、说明注意&#xff1a; SpringMVC - 04 整合 SSM 中篇 一、优化 在 spring-dao.xml 中配置 dao 接口扫描&#xff0c;可以动态地实现 dao 接口注入到 Spring 容器中。 优化前&#xff1a;手动创建 SqlSessionTempl…

STM32实现三个小灯亮

led.c #include"led.h"void Led_Init(void) {GPIO_InitTypeDef GPIO_VALUE; //???RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//???GPIO_VALUE.GPIO_ModeGPIO_Mode_Out_PP;//???? ????GPIO_VALUE.GPIO_PinGPIO_Pin_1|GPIO_Pin_2|GPIO_P…

spring-validation实现分组校验

文章目录 前言实际开发可能会使用到分组校验maven添加依赖简单使用高级应用分组自定义分组组合分组 源码地址 前言 JSR 303中提出了Bean Validation&#xff0c;表示JavaBean的校验&#xff0c;Hibernate Validation是其具体实现&#xff0c;并对其进行了一些扩展&#xff0c;…

Arduino上U8g2库显示中文的经历

u8g2自带很多中文库&#xff1b;但是向u8g2_font_wqy12_t_chinese3 比较全的应该是u8g2_font_wqy12_t_gb2312 这个&#xff0c;只是我还没有调用成功 这个库&#xff0c;中文就显示不全&#xff1b;有些没有定义&#xff0c;如百家姓 #include <Arduino.h> #include <…

Java经典框架之Spring

Java经典框架之Spring Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. Spring简介 2.…

HA启动Advanced SSH Web Terminal 提示附加组件似乎尚未准备就绪,它可能仍在启动。是否要再试一次?

环境&#xff1a; Home Assistant OS11.1 Advanced SSH & Web Terminal 17.0 问题描述&#xff1a; HA安装好SSH加载项&#xff0c;启动Advanced SSH & Web Terminal 提示附加组件似乎尚未准备就绪&#xff0c;它可能仍在启动。是否要再试一次&#xff1f; 解决方案…

.NET中的Swagger使用

目录 前言 一、Swagger是什么&#xff1f; 二、如何Swagger文档说明的信息 1.在AddSwaggerGen方法中写入文档信息 2.运行效果 二、文档UI界面标题、路由设置 1.在中间件UseSwaggerUI方法中配置 三、文档UI界面添加接口注释 1.在 .csproj中配置 2.在AddSwaggerGen方法中配置Incl…

Apache Spark简介与历史发展

在当今信息爆炸的时代&#xff0c;大数据处理已成为了现实。企业和组织需要处理海量数据来获得有用的信息和见解。Apache Spark作为一个开源的大数据处理框架&#xff0c;已经在大数据领域占据了重要地位。 Apache Spark简介 Apache Spark是一个用于大规模数据处理的快速、通…

新版IDEA中Git的使用(一)

说明&#xff1a;本文介绍如何在新版IDEA中使用Git 创建项目 首先&#xff0c;在GitLab里面创建一个项目&#xff08;git_demo&#xff09;&#xff0c;克隆到桌面上。 然后在IDEA中创建一个项目&#xff0c;项目路径放在这个Git文件夹里面。 Git界面 当前分支&Commit …

Qt/QML编程学习之心得:在QML中调用fileDialog(十六)

Qt中有一些内置的对话框dialog,比如 在QWidget工程中使用比较容易,比如 #include <QFileDialog>fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)")); 那么在QM…

word2003 open word2007+

Win 7 C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates 还是不行&#xff0c;重装office2003吧&#xff0c;再安装转换插件&#xff0c;但是再高版本好像没转换工具

由正规表达式构造DFA,以及DFA的相关化简

目录 1.由正规式到DFA 首先讲如何从正规式到NFA 如何从NFA到DFA 2.DFA的化简 3.DFA和NFA的区别 1.由正规式到DFA 正规式--->NFA---->DFA 首先讲如何从正规式到NFA 转换规则: 例题1&#xff1a;这里圆圈里面的命名是随意的&#xff0c;只要能区别开就可以了 如何…

助力打造清洁环境,基于YOLOv4开发构建公共场景下垃圾堆放垃圾桶溢出检测识别系统

公共社区环境生活垃圾基本上是我们每个人每天几乎都无法避免的一个问题&#xff0c;公共环境下垃圾投放点都会有固定的值班时间&#xff0c;但是考虑到实际扔垃圾的无规律性&#xff0c;往往会出现在无人值守的时段内垃圾堆放垃圾桶溢出等问题&#xff0c;有些容易扩散的垃圾比…

【UML】第12篇 序列图(1/2)——基本概念和构成

目录 一、什么是序列图&#xff08;Sequence Diagram&#xff09; 1.1 定义 1.2 主要用途 1.3 序列图和BPMN的区别和联系 二、序列图的构成 2.1 对象 2.2 生命线 2.3 消息 2.4 激活 序列图&#xff0c;是我个人认为的用处最多的一种图。产品和研发的同学&#xff0c;都…

向量投影:如何将一个向量投影到矩阵的行向量生成子空间?

向量投影&#xff1a;如何将一个向量投影到矩阵的行向量生成子空间&#xff1f; 前言 本问题是在学习Rosen梯度投影优化方法的时候遇到的问题&#xff0c;主要是对于正交投影矩阵(NT(NNT)-1N)的不理解&#xff0c;因此经过查阅资料&#xff0c;学习了关于向量投影的知识&…

【Datawhale x 财务学习笔记】用智谱清言的代码沙盒进行分析

体验网址 智谱清言&#xff1a;https://chatglm.cn/ prompt 帮我分析一下这个excel文件&#xff0c;从财务角度给出利润情况&#xff0c;并给出优化建议体验结果 首先&#xff0c;我将查看上传的Excel文件的内容&#xff0c;以便了解其结构和包含的数据。然后&#xff0c;我…