踏上R语言之旅:解锁数据世界的神秘密码(一)

R语言学习


文章目录

  • R语言学习
  • 数据矩阵与R语言表示
    • 1.创建一个向量(随机变量、一维数组)
    • 2.创建一个矩阵(二维数组)
    • 3.矩阵转置
    • 4.矩阵相加减
    • 5.矩阵相乘
    • 6.矩阵对角元素相关运算
    • 7.矩阵求逆
    • 8.矩阵的特征值与特征向量
    • 9.矩阵的Choleskey分解
    • 10.矩阵奇异值分解
    • 11.矩阵QR分解
    • 12.矩阵kronecker积
    • 13.矩阵的维数
    • 14.矩阵的行和、列和、行平均与列平均
  • 总结


数据矩阵与R语言表示

1.创建一个向量(随机变量、一维数组)

在R中可以用函数c()来创建一个向量,例如

>x1=c(171,175,159,155,152,158,154,164,168,166,159,164)
> x2=c(57,64,41,38,35,44,41,51,57,49,47,46)

这里,x1,x2分别为行向量,也可以认为是1行12列的矩阵。
函数length()可以返回向量的长度,mode()可以返回向量的数据类型,例如:

> length(x1)
[1] 12
> mode(x1)
[1] "numeric"

2.创建一个矩阵(二维数组)

(1)合并命令。可以用rbind()cbind()将两个以上的向量或矩阵合并起来,

rbind()表示按行合并,cbind()则表示按列合并。

> rbind(x1,x2)[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
x1  171  175  159  155  152  158  154  164  168   166   159   164
x2   57   64   41   38   35   44   41   51   57    49    47    46
> cbind(x1,x2)x1 x2[1,] 171 57[2,] 175 64[3,] 159 41[4,] 155 38[5,] 152 35[6,] 158 44[7,] 154 41[8,] 164 51[9,] 168 57
[10,] 166 49
[11,] 159 47
[12,] 164 46

(2)生成矩阵。在R中可以用函数matrix()来创建一个矩阵,引用该函数时需要输入必要的参数值。

> matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)[,1]
[1,]   NA

data项为必要的矩阵元素,nrow为行数,ncol为列数,注意nrow与ncol的乘积应为矩阵元素个数,byrow项控制排列元素时是否按行进行,dimnames给定行和列的名称,例如:

 matrix(x1,nrow=3,ncol=4)[,1] [,2] [,3] [,4]
[1,]  171  155  154  166
[2,]  175  152  164  159
[3,]  159  158  168  164
 matrix(x1,nrow=4,ncol=3)[,1] [,2] [,3]
[1,]  171  152  168
[2,]  175  158  166
[3,]  159  154  159
[4,]  155  164  164
 matrix(x1,nrow=4,ncol=3,byrow=T)[,1] [,2] [,3]
[1,]  171  175  159
[2,]  155  152  158
[3,]  154  164  168
[4,]  166  159  164

3.矩阵转置

A为mxn矩阵,A’为其转置矩阵,求A’在R中可用函数t(),例如:

> A=matrix(1:12,nrow=3,ncol=4)
> A[,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> t(A)[,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
[4,]   10   11   12

4.矩阵相加减

在R中对同行同列矩阵相加减,可用符号“+”、“-”,例如:

> A=B=matrix(1:12,nrow=3,ncol=4)
> A+B[,1] [,2] [,3] [,4]
[1,]    2    8   14   20
[2,]    4   10   16   22
[3,]    6   12   18   24
> A-B[,1] [,2] [,3] [,4]
[1,]    0    0    0    0
[2,]    0    0    0    0
[3,]    0    0    0    0

5.矩阵相乘

A为mxn矩阵,B为nxk矩阵,在R中求AB可用符号“%*%",例如:

> A=matrix(1:12,nrow=3,ncol=4)
> B=matrix(1:12,nrow=4,ncol=3)
> A%*%B[,1] [,2] [,3]
[1,]   70  158  246
[2,]   80  184  288
[3,]   90  210  330

6.矩阵对角元素相关运算

若要取一个方阵的对角元素,对一个向量应用diag()函数将产生以这个向量为对角元素的对角矩阵,对一个正整数k应用diag()函数将产生k维单位矩阵,例如:

> A=matrix(1:16,nrow=4,ncol=4)
> diag(A)
[1]  1  6 11 16
> diag(diag(A))[,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    6    0    0
[3,]    0    0   11    0
[4,]    0    0    0   16
> diag(4)[,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    1    0    0
[3,]    0    0    1    0
[4,]    0    0    0    1

7.矩阵求逆

矩阵求逆可用solve(),应用solve(A,b)运算结果可解线性方程组Ax=b,若b缺省,则系统默认为单位矩阵,由此可用其进行矩阵求逆,例如:

> A=matrix(rnorm(16),4,4);
> A[,1]       [,2]        [,3]       [,4]
[1,] -0.2930984 -1.7887997 -0.13792868  0.8021037
[2,] -1.3322062  0.3419297  1.18732716 -1.8372907
[3,]  1.0203442 -2.4283146  0.03727872 -2.4674615
[4,] -0.9507527  0.6046697 -0.79238198 -0.1241637
> solve(A)[,1]        [,2]       [,3]        [,4]
[1,] -0.35916036 -0.30123211  0.1268138 -0.38288995
[2,] -0.39760300 -0.02206908 -0.1143649  0.03076075
[3,]  0.08927873  0.35986115 -0.2013035 -0.74780287
[4,]  0.24412384 -0.09740967 -0.2433257 -0.19990320

8.矩阵的特征值与特征向量

矩阵A的谱分解为A=UΛU’,其中Λ是由A的特征值组成的对角矩阵,U的列为A的特征值对应的特征向量,在R中可以用函数eigen()得到U和Λ。

eigen(x,symmetric,only.values=FALSE,EISPACK=FALSE)

其中,x为矩阵,symmetric项指定矩阵x是否为对称矩阵,若不指定,系统将自动检测x是否为对称矩阵,例如:

> A=diag(4)+1;A;[,1] [,2] [,3] [,4]
[1,]    2    1    1    1
[2,]    1    2    1    1
[3,]    1    1    2    1
[4,]    1    1    1    2
> A.e=eigen(A,symmetric=T)
> A.e
eigen() decomposition
$values
[1] 5 1 1 1$vectors[,1]       [,2]       [,3]       [,4]
[1,] -0.5  0.8660254  0.0000000  0.0000000
[2,] -0.5 -0.2886751 -0.5773503 -0.5773503
[3,] -0.5 -0.2886751 -0.2113249  0.7886751
[4,] -0.5 -0.2886751  0.7886751 -0.2113249> A.e$vector%*%diag(A.e$values)%*%t(A.e$vectors)[,1] [,2] [,3] [,4]
[1,]    2    1    1    1
[2,]    1    2    1    1
[3,]    1    1    2    1
[4,]    1    1    1    2

上面最后的语句作用是重构原始矩阵,其中 A.e$vector 是原始矩阵的特征向量,diag(A.e$values) 是一个以特征值为对角线元素的对角矩阵,t(A.e$vectors) 是特征向量的转置矩阵。

9.矩阵的Choleskey分解

对于正定矩阵A,可对其进行Choleskey分解,即A=P’P,其中,P为上三角矩阵,在R中可以用函数chol()进行Choleskey分解,例如:

> A.c=chol(A)
> A.c[,1]      [,2]      [,3]      [,4]
[1,] 1.414214 0.7071068 0.7071068 0.7071068
[2,] 0.000000 1.2247449 0.4082483 0.4082483
[3,] 0.000000 0.0000000 1.1547005 0.2886751
[4,] 0.000000 0.0000000 0.0000000 1.1180340
> t(A.c)%*%A.c[,1] [,2] [,3] [,4]
[1,]    2    1    1    1
[2,]    1    2    1    1
[3,]    1    1    2    1
[4,]    1    1    1    2

10.矩阵奇异值分解

A为mxn矩阵,rank(A)=r,可以分解为A=UDV’,其中,U’U=V’V=I。在R中可以用函数svd()进行奇异值分解,例如:

> A=matrix(1:18,3,6);A;[,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    4    7   10   13   16
[2,]    2    5    8   11   14   17
[3,]    3    6    9   12   15   18
> A.s=svd(A)
> A.s
$d
[1] 4.589453e+01 1.640705e+00 1.366522e-15$u[,1]        [,2]       [,3]
[1,] -0.5290354  0.74394551  0.4082483
[2,] -0.5760715  0.03840487 -0.8164966
[3,] -0.6231077 -0.66713577  0.4082483$v[,1]        [,2]       [,3]
[1,] -0.07736219 -0.71960032 -0.4076688
[2,] -0.19033085 -0.50893247  0.5745647
[3,] -0.30329950 -0.29826463 -0.0280114
[4,] -0.41626816 -0.08759679  0.2226621
[5,] -0.52923682  0.12307105 -0.6212052
[6,] -0.64220548  0.33373889  0.2596585> A.s$u%*%diag(A.s$d)%*%t(A.s$v)[,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    4    7   10   13   16
[2,]    2    5    8   11   14   17
[3,]    3    6    9   12   15   18

11.矩阵QR分解

A为mxn矩阵时可以进行QR分解,A=QR,其中,Q’Q=I,在R中可以用函数qr()进行QR分解,例如:

> A=matrix(1:16,4,4)
> qr(A)
$qr[,1]        [,2]          [,3]          [,4]
[1,] -5.4772256 -12.7801930 -2.008316e+01 -2.738613e+01
[2,]  0.3651484  -3.2659863 -6.531973e+00 -9.797959e+00
[3,]  0.5477226  -0.3781696  1.601186e-15  2.217027e-15
[4,]  0.7302967  -0.9124744 -5.547002e-01 -1.478018e-15$rank
[1] 2$qraux
[1] 1.182574e+00 1.156135e+00 1.832050e+00 1.478018e-15$pivot
[1] 1 2 3 4attr(,"class")
[1] "qr"

12.矩阵kronecker积

nxm矩阵A与hxk矩阵B的kronecker积为一个nhxmk维矩阵,在R中,kronecker积可以用函数kronecker()来计算,例如:

> A=matrix(1:4,2,2)
> A[,1] [,2]
[1,]    1    3
[2,]    2    4
> B=matrix(rep(1,4),2,2);B;[,1] [,2]
[1,]    1    1
[2,]    1    1
> kronecker(A,B)[,1] [,2] [,3] [,4]
[1,]    1    1    3    3
[2,]    1    1    3    3
[3,]    2    2    4    4
[4,]    2    2    4    4

13.矩阵的维数

在R中很容易得到一个矩阵的维数,函数dim()将返回一个矩阵的维数,nrow()返回行数,ncol()返回列数,例如:

> A=matrix(1:12,3,4)
> dim(A)
[1] 3 4
> nrow(A)
[1] 3
> ncol(A)
[1] 4

14.矩阵的行和、列和、行平均与列平均

一个矩阵的和、平均数以及列的和、平均数,例如:
rowSums() rowMeans() colSums() colMeans()

> rowSums(A)
[1] 22 26 30
> rowMeans(A)
[1] 5.5 6.5 7.5
> colSums(A)
[1]  6 15 24 33
> colMeans(A)
[1]  2  5  8 11
> A[,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

上述关于矩阵行和列的操作,还可以使用apply()函数实现:

apply(X,MARGIN,FUN,…)
其中,X为矩阵,MARGIN用来指定是对行运算还是对列运算,MARGIN=1表示对行运算,MARGIN=2表示对列运算,FUN用来指定运算函数,”…"用来给定FUN中需要的其他参数,例如:

> apply(A,1,sum)
[1] 22 26 30
> apply(A,1,mean)
[1] 5.5 6.5 7.5
> apply(A,2,sum)
[1]  6 15 24 33
> apply(A,2,mean)
[1]  2  5  8 11

apply()函数还可以对矩阵的行或列进行其他运算,例如计算每一列的方差:

> A=matrix(rnorm(10),2,5)
> apply(A,2,var)
[1] 0.06233338 1.72555863 0.45365134 0.83043694 0.37709323
> apply(A,2,function(x,a)x*a,a=2)[,1]      [,2]       [,3]       [,4]       [,5]
[1,] -2.437330 -1.090969 -1.5564223  1.9951652  0.3086047
[2,] -1.731167  2.624468  0.3486265 -0.5823327 -1.4282735

注:最后一式与A*2效果一致,旨在说明如何应用apply函数

总结

主要运用的是线性代数里面所涉及到的知识,不得不说,R语言所包含的函数着实比较丰富,所学知识取自王斌会老师的《多元统计分析及R语言建模》,上述内容均本人手敲,创作不易,收获不浅,继续加油!

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

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

相关文章

原来是这样的Three.js,我悟了

最近在b站上面看到up主:gamemcu的3D作品,着实让人感到非常震撼,作品中的SU7模型,利用的是Blender进行建模,利用了webGL的技术进行开发。由此启发了我对3D极大的乐趣。因此,凭借一点点🤏的前端知…

RK3588 Android13 TvSetting 中增加 Usb 模式 Host/OTG 切换

前言 电视产品,客户要求在设置中设备偏好设置子菜单下增加一个USB模式切换菜单,一开始准备直接开整。但发现在开发者选项里就已经包含了一个USB模式 菜单了,只是没有 OTG HOST 这两选项,那就把这个菜单挪出来再增加一下就完事了,开整。 客户提供对比机图 效果图 framew…

【计算机毕业设计】学习平台功能介绍——后附源码

🎉**欢迎来到我的技术世界!**🎉 📘 博主小档案: 一名来自世界500强的资深程序媛,毕业于国内知名985高校。 🔧 技术专长: 在深度学习任务中展现出卓越的能力,包括但不限于…

学习部分排序,插入排序,冒泡排序以及希尔排序

1.插入排序 <1>.首先我们举个例子 我们要把6进行前面的插入&#xff0c;那我们要进行比较&#xff0c;首先确定一个end的指针&#xff0c;然后他指向的数字就是我们需要比较的&#xff0c;如果end指向的数比我们end1 的大的话&#xff0c;那我们就往前挪一个&#xff0c…

有效Dk值提取方法的仿真分析

目录 1. TDR技术提取Dk值的方法 2. 传输线双端口Delta-L技术提取Dk值的方法 3. 传输线单端口Delta-L技术提取Dk值的方法 4. 总结 参考文献 1. TDR技术提取Dk值的方法 测试有效Dk值的一些传统而有效的方法[1][2]&#xff0c;是采用TDR阻抗测试仪测试专门设计的传输线的传播延…

我的AI数字人分身上线了!

说起AI数字人&#xff0c;大家一定不会陌生。随着全民AI时代的到来&#xff0c;许多机关单位、企业和个人&#xff0c;都纷纷制作了自己的数字人形象。 前些天&#xff0c;小灰的老东家刘强东也开始用数字人直播带货&#xff0c;瞬间引爆了全网。 这一切背后的本质是什么呢&…

抽真空规范操作

抽真空规范操作 抽真空操作中&#xff0c;一个被忽视的现象是&#xff1a;许多维修人员热衷于解决空调故障&#xff0c;却对施工过程中的规范操作敷衍了事。殊不知&#xff0c;正是这些看似微不足道的细节疏忽&#xff0c;往往诱发空调各类疑难故障&#xff0c;令售后维修陷入…

Kubernetes Kafka 系列|MirrorMaker 2 同步数据

一、MirrorMaker 2介绍 MirrorMaker 2&#xff08;简称MM2&#xff09;是Apache Kafka的一个工具&#xff0c;主要用于跨Kafka集群的数据复制和同步。相比早期的MirrorMaker 1&#xff08;简称MM1&#xff09;&#xff0c;MirrorMaker 2在设计和功能上有了显著的提升&#xff…

【创建型模式】原型模式

一、原型模式概述 原型&#xff08;Prototype&#xff09;模式的定义&#xff1a;用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里&#xff0c;原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效&#xf…

CV 面试指南—深度学习知识点总结(1)

本期专栏文章: CV 面试指南—深度学习知识点总结(1)CV 面试指南—深度学习知识点总结(2)CV 面试指南—深度学习知识点总结(3)CV 面试指南—深度学习知识点总结(4)CV 面试指南—深度学习知识点总结(5)

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.4-1.5

目录 第一门课&#xff1a;第二门课 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)…

QT c++ 将浮点数数组转换成 QByteArray

//上一篇文章&#xff0c;描写了怎么将数据已字节数组的形式写到Sqlite 数据库&#xff0c;那么。 //本文描述2种方法将浮点数数组转换为字节数组QByteArray //在QT6.2.4 MSVC2019 调试通过 #include <QCoreApplication> #include <QByteArray> #include <Q…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现相机给外界IO信号输出(C#)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现相机给外界IO信号输出&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机BGAPISDK和相机IO信号输出的技术背景Baumer工业相机通过BGAPISDK实现相机IO信号的输出功能1.引用合适的类文件2.通过BGAPISDK在初始化时设置相应…

Vue接收接口返回的mp3格式数据并支持在页面播放音频

一、背景简介 在实际工作中需要开发一个转音频工具&#xff0c;并且能够在平台页面点击播放按钮播放音频 二、相关知识介绍 2.1 JS内置对象Blob Blob对象通常用于处理大量的二进制数据&#xff0c;可以读取/写入/操作文件、音视频等二进制数据流。Blob表示了一段不可变的二…

【PCL】教程alignment_prerejective.cpp 刚性物体的鲁棒位姿估计

The viewer window provides interactive commands; for help, press h or H from within the window. > Loading V:\learn\PCL\pcl\examples\test\chef.pcd [PCLVisualizer::setUseVbos] Has no effect when OpenGL version is 鈮?2 [done, 327.147 ms : 5092 points] Ava…

【torch函数】torch.multinomial函数

torch.multinomial 是PyTorch中的一个函数&#xff0c;用于从多项分布中抽取样本。多项分布是一种描述多个可能结果的概率分布&#xff0c;例如抛硬币、掷骰子等。 torch.multinomial的用法如下&#xff1a; torch.multinomial(input, num_samples, replacementFalse, *, gene…

C++入门之类和对象(下)

C入门之类和对象(下) 文章目录 C入门之类和对象(下)一、初始化列表1.1 概念1.2 注意事项 11.3 注意事项 21.4 注意事项 3 二、explicit关键字2.1 为什么要有explicit关键字 三、static成员3.1 static修饰类的成员和成员函数 一、初始化列表 1.1 概念 先来看看构造函数 #incl…

MySQL 中 InnoDB 存储引擎使用的 B+树底层数据结构

简要介绍 InnoDB 和它为什么选择使用 B树 InnoDB 是 MySQL 中默认的存储引擎&#xff0c;广泛用于生产环境中&#xff0c;特别是在要求高可靠性和事务性的应用场景。这个存储引擎支持事务处理、行级锁定、外键约束等高级数据库功能&#xff0c;这使得它非常适合处理大量数据并…

力扣爆刷第122天之CodeTop100五连刷96-100

力扣爆刷第122天之CodeTop100五连刷96-100 文章目录 力扣爆刷第122天之CodeTop100五连刷96-100一、912. 排序数组二、24. 两两交换链表中的节点三、297. 二叉树的序列化与反序列化四、560. 和为 K 的子数组五、209. 长度最小的子数组 一、912. 排序数组 题目链接&#xff1a;h…

AI大模型量化格式介绍(GPTQ,GGML,GGUF,FP16/INT8/INT4)

在 HuggingFace 上下载模型时&#xff0c;经常会看到模型的名称会带有fp16、GPTQ&#xff0c;GGML等字样&#xff0c;对不熟悉模型量化的同学来说&#xff0c;这些字样可能会让人摸不着头脑&#xff0c;我开始也是一头雾水&#xff0c;后来通过查阅资料&#xff0c;总算有了一些…