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函数即可自动运行示例