r语言中矩阵QR分解_从零开始学R语言Day4|向量、矩阵和数组

从零开始学R语言Day4|向量、矩阵和数组

1.1向量

1.1.1向量

在Day2中我们提及过用和c()函数来构建向量,具体实例如下。

c1fdcc710af47d483adf4251cac069ab.png

42af84d750f2b497c89bacaa1a781cdd.png

我们还可以采用vector(“类型”,长度)函数来创建一个指定类型和长度的矢量,这里的类型是指数据类型。但是个人觉得这个函数很鸡肋,因为不能控制具体的参量输入,只能做初始化用途,据说是R语言发展历史中的遗留函数,所以本函数就权当了解一下R的历史吧。具体实例如下:

435802ede4be0e8de68758889fda6df2.png

此后这样的鸡肋函数将不再介绍和记录,感觉意义不大。

1.1.2序列和索引

可以用seq()函数构建序列,功能和:相似,但与:不同的是seq能够控制步长。因此seq()比:会更好用一点。seq()的用法如下:

seq(初始值,终止值,步长)

b145e2fd41d8b7df02cd540e1c172dc5.png

seq()函数下的各种方法的功能均相仿,对此我也表示比较困惑,诸如http://seq.int、seq_len、seq_along。

值得一提的是seq.Data()是对时间取序列

9b929526449091d7b46b1d106320063c.png

length()函数可以求得所有数据类型的长度,但要注意对字符串类型的向量求长度的时候计算的是向量里的因子个数

d2c8ff4b0921a91e16a17d8a80aae83a.png

如果要求得向量里每个字符串的长度,则使用nchar()

fe8206f286bd9c600c07123ccca875e6.png

用 变量命[] 这种形式可以索引向量中的某个元素,需要注意的是,R中下表不是从0开始计算而是从1开始计算。当你想要一次返回多个值时,应该用c()函数联接下标,否则将报错。

2df20257514a280d12593b196ce7f1ea.png

如果给向量中每个函数进行了命名,索引其名字也可以返回值。

5f30358e8894d0e344befda1ffc22af8.png

R语言的索引和其他语言的索引还有一个不同之处,一般编程语言以负数为下标是从末尾往前读取,比如说-1读取的是最后一个字符,但是在R中以负数为索引则是不引用这个位置的字符的意思。比方说x[-2]则是跳过下标为2的字符,具体实例如下:

117d6eae78fbddb83f64b5bde18ec146.png

x[] 这条指令将返回整个向量

8b3712ed499a75152a344da3f7eabc44.png

which()将返回逻辑值为真的值的位置,因此当你需要检索检索某个区间内的值的位置的时候可以很方便的使用他,which.min()是检索出最小值的位置,which.max()是检索出最大值的位置。

e197e5c2a21a06ac4232ce243d8bca47.png

rep()函数允许重复使用元素创建矢量,rep有几种用法,不太好用语言概述,因此枚举简单的实例加以注解

80aceb880ba9b26a4b7d0f3ec04eb611.png

rep_len()是rep(1:5,length.out=7)这个用法的变体

1.2矩阵和数组

向量是数组的特殊形式,即一维数组,故此处的数组是从二维开始算起的。矩阵也是数组的特殊形式。

1.2.1创建数组和矩阵

array()函数创建数组,它总共可以输入值、维度和维度名三个参量,当然参数名是一个可选的参量,不输入系统会生成默认的参量名。下面上例子,通过例子加注解的方式会更直白。

f8c014a30578703b6e9b3af9e7465978.png

903317b9aed9fb32f214618259a0e6d9.png

矩阵的构建使用matrix()函数,具体用法和array()相似,只是matrix()没有dim参量,而是换成了nrow、ncol.上实例:

abe3c5bb039e55e166ac8410e2fd3373.png

在这里我不得不多嘴一句,在构建这种有大量括号的语句的时候,一定要小心细致的检查任意一个标点符号,任何地方出错都会报如下错误

02bc54387d950d8c2f1b4d2886ca64b5.png

我在编例子时就因为丢了一个小小的逗号报错了。

1a25f2a850052fabb73d4c2ac95f018f.png

1.2.2数组的索引

数组的索引和向量的索引语法一致,四种指定索引的方法在这里均可成立(正整数、负整数、逻辑值、元素名称),这里不过多的赘述。

语法:x[第几行,第几列]也可以结合c函数同时索引几个数据。

1.2.3合并矩阵

第一步:用c函数将两个矩阵转换成向量

4d4e758bd6edfa932403005cb731f6bb.png

第二步,根据自身需要选择cbind()、rbind()函数按行和列来绑定两个矩阵

5c0f442a5ca0dbd9d36e801482fd8df5.png

1.2.4数据运算

在复合线性代数的规则下,数组之间均可以进行加减乘除,比如上例中要将x、y相加,直接键入x+y即可。

t()函数可以用来转置矩阵,但不能转置更高维度的数组

367ed2cf46c503315a369de56ad31aab.png

矩阵的内乘运算使用%*%这一运算符,外乘使用%o%这一运算符,这里不再举例,运用十分简单。

矩阵求反

方法一:

先对矩阵求-1次幂,再对求得的-1次幂的矩阵用solve()函数。

注意!!!必须时正方形的矩阵,否则报错!!!

cba0cd4a062ef91e8ccfb114e228c32f.png

法二:还可以用qr.solve()或chol2inv(chol(m))替代solve(),不过一般记住solve函数就行

【未完待续,持续更新……】

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值