R实战:【基本类型】向量c和矩阵matrix

R实战系列专栏
向量
创建向量

改变向量的结构的方法就是重新赋值

x<-2:10  #用冒号运算符创建向量元素递增2 3 4 5 6 7 8 9 10

x<-20:10  #用冒号运算符创建递减向量20 19 18 17 16 15 14 13 12 11 10

c(1:10) #创建一维向量 1  2  3  4  5  6  7  8  9 10

c(1,2,3,5) #创建向量 1 2 3 5

seq(1,10,3) #步长为3产生向量1  4  7 10

seq(1,10,length=3) #总共3个 1.0  5.5 10.0

seq(x) #x所有元素的下标组成的向量

length(seq(NULL)) # 0 , seq(x)常用来遍历元素

NA #表示未知的值length(NA) = 1

NULL#表示不存在,空的 length(NULL) = 0

转化为矩阵as.matrix(x)

> y<-1:10
> y
 [1]  1  2  3  4  5  6  7  8  9 10
> as.matrix(y)
      [,1]
 [1,]    1
 [2,]    2
 [3,]    3
 [4,]    4
 [5,]    5
 [6,]    6
 [7,]    7
 [8,]    8
 [9,]    9
[10,]   10

向量化运算
循环补齐:长度不同的向量在做加法等运算时短的会循环补齐到和长的相同长度再运算,常量也一样

对x调用函数f,其实是x的每个元素都被调用了f;普通运算符也是向量化函数。这样可以成百倍的提高程序的运行速度

几乎所有函数都是向量化的,所以你的程序中如果使用了for循环,基本就烂到家了

> x
[1] 1 2 3 4 5
> w<-function(x) return (x+1)
> w(x)
[1] 2 3 4 5 6

> c(1,3,7,9,14)+1
[1]  2  4  8 10 15


向量提取(筛选)

> x<-c(1,3,8,2,20)
> x[x>3]<-0
> x
[1] 1 3 0 2 0
> 

subset筛选(NA会舍弃)

> x
[1]  1  3  8  2 20 NA
> x[x>5]
[1]  8 20 NA
> subset(x,x>5)
[1]  8 20

which获取符合条件的下标

> x
[1]  1  3  8  2 20 NA
> which(x>7)
[1] 3 5

矩阵
改变矩阵的结构的方法就是给矩阵重新赋值
矩阵是按列存储的:先存储第一列,再存储第二列
创建矩阵

> y<-matrix(c(1,2,3,4,5,6),nrow=2)
> y
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> 

m<-rbind(c(1,4),c(2,2)) #每个C是一行(row bind)

> m<-rbind(c(1,4),c(2,2),c(5,6)) #每个C是一行(row bind)
> m
     [,1] [,2]
[1,]    1    4
[2,]    2    2
[3,]    5    6
> 

> y<-1:3
> y
[1] 1 2 3
> t<-as.matrix(y)
> t
     [,1]
[1,]    1
[2,]    2
[3,]    3
> cbind(t,t,t)
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3

按行创建

> y<-matrix(c(1,2,3,4,5,6),nrow=2,byrow=T)
> y
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

子矩阵

提取矩阵的某一行

m[1,] #提取矩阵的第1行,会降维变成成向量

提取矩阵的某一列

m[,2] #提取矩阵的第2列,会降维变成向量

矩阵函数

nrow(x) #获取矩阵的行数

ncol(x) #获取矩阵的列数

dim(x) #获取矩阵的行数和列数

t(x) #矩阵转置

apply(m,dimcode,f,fargs) #dimcode为1表示按行应用,2表示按列应用

> z<-matrix(c(1,2,3,4,5,6),nrow=3)
> z
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> f<-function(x) x/c(2,8)
> y<-apply(z,1,f)
> y
     [,1]  [,2] [,3]
[1,]  0.5 1.000 1.50
[2,]  0.5 0.625 0.75
> t(y)
     [,1]  [,2]
[1,]  0.5 0.500
[2,]  1.0 0.625
[3,]  1.5 0.750
矩阵的行列命名

> z<-matrix(c(1,2,3,4,5,6),nrow=3)
> z
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> colnames(z)
NULL
> colnames(z)<-c("a","b")
> colnames(z)
[1] "a" "b"
> z["a"]
[1] NA
> z[,"a"]
[1] 1 2 3
rbind 追加行 
cbind 追加列
> x<-rbind(1:3,4:6,7:9)
> x
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
> y<-cbind(1:3,4:6,7:9)
> y
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> x<-cbind(x,10:12)
> x
     [,1] [,2] [,3] [,4]
[1,]    1    2    3   10
[2,]    4    5    6   11
[3,]    7    8    9   12
> y<-rbind(y,10:12)
> y
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
[4,]   10   11   12


矩阵下标支持模糊查询
矩阵的下标自动支持模糊查询,请看下例:
> library(quantmod)#加载包  
> setSymbolLookup(WK=list(name='603166.ss',from = '2014-01-01', to = '2017-08-09', src='yahoo'))#从雅虎获取个股数据  
> getSymbols("WK")  
[1] "WK"
> chartSeries(WK)#画图 
> names(WK)
[1] "603166.SS.Open"     "603166.SS.High"    
[3] "603166.SS.Low"      "603166.SS.Close"   
[5] "603166.SS.Volume"   "603166.SS.Adjusted"
> WK['2017-08',1]
           603166.SS.Open
2017-08-01          11.43
2017-08-02          11.25
2017-08-03          11.00
2017-08-04          11.30
2017-08-07          11.00
2017-08-08          11.20
数据显示不全
options(max.print=1000000)


面向对象与泛型编程

R的函数基本都是函数模板,接收不同的类的对象作为参数,具体需要找到对应类的执行函数来执行

工作目录

获取当前工作目录

getwd()

设置工作目录

setwd()

或者

从主菜单中选择“文件”(File)→“改变工作目录”(Change dir...)

example函数

你想获取示例代码直接将要了解的函数名填入这个example函数即可自动运行示例





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值