R程序包的安装和加载
install.packageS(''TSA'')
library(''TSA'')
R向量 (vector)
数值向量
1.赋值
- x<-c(1,2,3,4)
- assign('' x'',c(1,2,3,4))
- x=c(1,2,3,4)
- x<-2*1:15 % x=(2,4,...,30) 等差运算优先于乘法运算
- seq(from=value1,to=value2,by=value3)
- seq(length=value2,from=value1,by=value3)
- rep(x,times=3)
- rep(x,each=2)
- rep(x,1:3)
2.运算
- %/% 表示商的整数部分,%%表示余数
- 复数开方时应输入sqrt(-2+0i)
3.函数
- which.min(x) %找位置
- cumsum(x) %累积求和
- rev(x) %求向量的逆序
- sd(x) %求向量的标准差
- order(x,decreasing=TRUE) %降序给出其排序位置
- union(X,Y) %并集
- intersect(X,Y) %交集
- unique(X) %除去V中重复元素的集合
- setdiff(X,Y) %表示数集X和Y的差集
- c%in%Y %检验c是否为为集合中的元素
- choose(n,k) %从含有n个元素的集合中选取含有k个元素的子集的数目
- setequalX,Y) %检验集合X和Y是否相等
逻辑向量
- all() %判断一个逻辑向量是否全部为真
- any() %判断一个逻辑向量是否有真的函数
缺失数据
- is.na() %检验缺失数据
- z[is.na(z)]<-0 %将缺失数据改为0
- is.finite() %检测是否有限
元素访问与读取
- X[V]表示取出所有V为真值的元素
- Z[is.na(Z)]<-0 %将向量中缺失数据赋值为0
- V[-c()] %表示扣除相应元素
- ages<-c()
- names()
y<-numeric(lenth(x))
y[x<0]<-1-x[x<0];y[x>=0]<-1+x[x>=0]
R数组与矩阵 (array matrix)
数组与矩阵的正成
定义数组
维数向量(dim属性) 默认按列排放
构造多维数组
array(data=NA,dim=length(data),dimnames=NULL)
构造矩阵
matrix(data=NA,nrow=1,ncol=1,byrow=F,dimnames=NULL) byrow=T数据按行放置
访问
a[, ,]或a[ ] % 都表示整个数组
运算
数组运算
维数不一样的数组也可以进行四则运算,一般是将短向量循环使用
矩阵运算
- t(A) %转置
- det() %求方阵行列式
- X%*%Y %X和Y的内积,先相乘后相加
- crossprod(X,Y) %X和Y的内积
- X%°% %X和Y的外积
- ourter(X,Y) %求X和Y的外积
- A%*%B %通常意义下矩阵的乘积
- solve(A,b) %解线性方程组AX=b
- solve(A) %求矩阵的逆
函数
- cbind() %把自变量横向按列拼成一个大矩阵
- as.vector(A) %将矩阵转化为向量
- aperm(A,C(2,3,1)) %将A的第二维移到了第一维
- apply(A,1,sum) %按行,求和
R的对象与属性
内在属性
mode(类型)length(长度)
类型共有四种:数值型(numeric)、字符型(character)、逻辑型(logical)、负数型(complex)
R列表与数据框
列表
- Lst[[ ]] % (每次只能引用一个元素)
- Lst $ name % 引用格式:列表名+元素名
- Lst $ income % 增加一个元素
- Lst $ income<-NULL % 删除一个元素
数据框
- data.frame() % 各自变量变成数据框的成分/生成
- as.data.frame() % 强制转成数据框
- df[ ] % 数据框的引用
- names() % 只能用于数据框的变量名
- roenames() % 属性定义行名
- attach(df) % 数据框数据的调用(列表也可以)
- detach() %取消连接
- edit() %对数据进行修改或编辑
R 控制流及函数编写
分支语句
1.if/else语句
2.switch语句
循环语句
1.for循环语句
# 构造一个4阶的Hilbert矩阵
n<-4;x<-array(0,dim=c(n,n))
for (i in 1:n){
for(j in 1:n){
x[i,j]<-1/(i+j+1)
}
}
x
2.while循环语句
# 计算1000以内的Fibonacci数
f<-1;f[2]<-1;i<-1
while (f[i]+f[i+1]<1000){
f[i+2]<-f[i]+f[i+1]
i<-i+1
}
f
3.repeat循环语句
f<-1;f[2]<-1;i<-1
repeat{
f[i+2]<-f[i]+f[i+1]
i<-i+1
if ((f[i]+f[i+1]>=1000)) break
}
函数编写
1.二分法
例:编写一个用二分法求解非线性方程根的函数,并求方程
在区间[1,2]上的根,精度要求
解:二分法计算过程如下:取中点,若f(a)与f(b)异号,则取b=x;否则a=x.
fzero<-function(f,a,b,eps=1e-5){
if (f(a)*f(b)>0)
list(fail="finding root is fail!")
else{
repeat{
if (abs(b-a)<eps) break
x<-(a+b)/2
if (f(a)*f(x)<0) b<-x else a<-x
}
list(root=(a+b)/2,fun=f(x))
}
}
f<-function(x) x^3-x-1
fzero(f,1,2)
# 求一元方程根的函数uniroot()
f<-function(x) x^3-x-1
uniroot(f,c(1,2))
2.Newton法解非线性方程
例:编写一个用Newton法求解非线性方程根的函数,并求方程
精度要求
newton<-function(f,eplison,x0,iter_max){
x=x0
iter=0
dx=D(f,'x')
while (iter<=iter_max){
ans=x-eval(f)/eval(dx)
if (abs(x-ans)<eplison){
break
}
else{
x=ans
}
iter=iter+1
}
list(x,iter)
}
newton(expression(x^3-x-1),0.000001,1.5,100000) # 取初值=1.5
3.Newton法解非线性方程组
例:编写用Newton法求解非线性方程组解的程序,并求方程
取初始值,精度要求
Newtons<-function(fun,x,ep=1e-5,it_max=100){
index<-0;k<-1
while (k<=it_max){
x1<-x;obj<-fun(x);
x<-x-solve(obj$J,obj$f);
norm<-sqrt((x-x1) %*% (x-x1))
if (norm<ep){
index<-1;break
}
k<-k+1
}
obj<-fun(x);
list(root=x,it=k,index=index,FunVal=obj$f)
}
funs<-function(x){
f<-c(x[1]^2+x[2]^2-5,(x[1]+1)*x[2]-(3*x[1]+1))
J<-matrix(c(2*x[1],2*x[2],x[2]-3,x[1]+1),nrow=2,byrow=T)
list(f=f,J=J)
}
Newtons(funs,c(0,1))
输出结果为:
$root [1] 1 2 $it [1] 6 $index [1] 1 $FunVal [1] 1.598721e-14 6.217249e-15