#R是作为统计语言,生来就对统计计算有良好的支持,一个函数就能实现一种统计计算,所以用R语言做计算特别方便。
#基本计算 三角函数计算 方程计算
#1 基本计算 四则运算: 加减乘除, 余数, 整除, 绝对值, 判断正负
a<-10;b<-5;c=3
a+b;a-b;a*b;a/b #加减乘除
a%%b;a%/%b;a%%c;a%/%c # 余数,整除
abs(-a) #绝对值
sign(-5:6) # 判断正负
cb;c-b;c(b/10);73;7**3 # 幂
exp(1) #自然常数e
options(digits = 16) #保留小数位数
exp(3) # 自然常数e的幂
sqrt© # 平方根
log2© # 以2为底的对数
log10(b) # 以10为底的对数
log(c,base = 2) # 自定义底的对数,log(a,b)表示以b为底,a的对数
log(2.7) #以自然常数e为底的对数
aa;a!=b;a>b;ac #比较计算
w=c(4,-2,7,0)
(w>3)&(c(0,3,5,6)<2)
(w>3)|(c(0,3,5,6)<2) #逻辑运算
pi # π
x=100
(1+1/x)^x
x=200
(1+1/x)^x
x=10000 #指数的极限
(1+1/x)^x
x=seq(100,3000,by=10)
y=(1+1/x)^x
plot(x,y)
#约数计算: ceiling,floor,trunc,round,signif
ceiling(5.4) # 向上取整
floor(5.8) # 向下取整
trunc(3.9) # 取整数
round(5.8) # 四舍五入
round(5.8833, 3) #四舍五入,保留3位小数
#数组计算: 最大, 最小, 范围, 求和, 均值, 加权平均, 连乘, 差分, 秩,中位数, 分位数
1:20;1:100;25:1;1.5:8;c(1:8,17:25)
seq(1,20,2);seq(5,40,6);seq(50,2,-5)
d=seq(1,20,2) #生成1到20,步长为2的等差数列
d
max(d);min(d);range(d) # 求最大值,最小值,范围range
sum(d);mean(d) # 求和,均值
weighted.mean(d,rep(1,10)) # 加权平均,rep表示1重复10次,每个值等权重
weighted.mean(d,c(1,2,3,4,5,6,7,8,9,10)) #不同的权重,权重一定要和数组等长
m=c(80,90);weighted.mean(m,c(0.4,0.6))
prod(1:5) # 连乘
prod(seq(1,9,2)) #1,3,5,7,9连乘
diff(d) #差分
diff(c(1,4,5,77)) #差分
rank(d) #求秩
median(d) #求中位数
rank(c(85,78,90,99,65,90))
median(c(85,78,90,99,65,90))
quantile(d) ## 分位数
quantile(1:100);quantile(1:100,probs=seq(0,1,0.1))
#排列组合计算: 阶乘, 组合, 排列
factorial(5) # 5!阶乘
choose(5, 2) # 组合, 从5个中选出2个的种类
choose(5, 2)*factorial(2) # 排列,从5个中选出2个
#累加, 累乘
cumsum(1:5) #累加
cumprod(1:5) #累乘
#向量、矩阵、多维数组运算
x=c(1,2,6.5) #定义向量最常见的方法是用函数c
xl=length(x);xl #length代表向量长度
x[2] #代表由该位置组成的子向量
p=1:100;k=c(1,15,7);p[k];p[-k] #中括号内为负数,则表示剔除相应位置的元素后组成的向量
(c(2,4,6)+(-2))[2];(c(2,4,6)+(-2))[-2] #思考结果
y=x**3+1;y
w=c();length(w) #可以创建没有元素的向量
#两个等长度向量进行加减乘除、乘方等运算,对应元素间进行相应运算
c(1,3,5)+c(10,20,30)/c(2,4,5);c(1,3,5)*c(2,4,6) #向量运算同样遵循运算级先后顺序
#两个长度不同的向量进行计算,长度短的将循环使用,直至和长向量长度相同为止
c(1,2,3,4,5,6)+c(1,2) #长向量是短向量倍数
c(1,2,3,4,5,6,7)+c(1,2) #长向量不是短向量倍数,依然采用短向量循环补齐,提示警告信息
#向量的函数,有的是基于每个元素计算,有的是基于整个向量计算
sqrt(1:6);mean(1:6);sort(c(1:4,17:9));sort(c(1:4,17:9),decreasing = TRUE) #sort排序,默认升序
#注意1:n-1与1:(n-1)的区别
1:5-1;1:(5-1)
#向量交集、并集、差集运算
m=1:20;n=seq(1,30,2)
intersect(m,n) #交集
union(m,n) #并集
setdiff(m,n) #差集,从m中排除n
setequal(m, n) #判断两集合是否相等
unique(c(m,n)) #取唯一值,去掉重复
#矩阵
A=matrix(1:12,nrow=3,byrow = TRUE);A=matrix(1:12,4) #矩阵,默认按列
B=matrix(c(1,2),ncol=3,nrow=4);B #向量长度不够,循环补齐
c(A) #按A矩阵列拉直
x1=rbind(c(1,2),c(3,4));x1 #按行合并
x2=cbind(c(1,2),c(3,4));x2 # 按列合并
#矩阵计算也包括加减乘除等,但要主要矩阵乘法运算规则
A=matrix(c(3,5,2,3),nrow=2,ncol=2);A
B=matrix(c(1,1,0,1),nrow=2,ncol=2);B
A+B;A-B;AB;A%%B #矩阵乘法用%*%
solve(A) #如果矩阵A可逆,则求逆矩阵
solve(A,B) #解矩阵方程A%*%x=B中的x
det(A) #求行列式的值
t(A) #求转置矩阵
diag(A);diag(c(1:5)) #矩阵主对角元素,生成对角线为1,2,3,4,5其它位置为0的矩阵
diag(4) #生成单位矩阵
rowSums(A);rowMeans(A) #矩阵行的和,行平均
colSums(A);colMeans(A) #矩阵列的和,列平均
svd(A) #计算矩阵奇异值分解
qr(A) #计算QR分解
eigen(A) #计算特征向量和特征值
D=matrix(1:6,nrow=3,ncol=3);D #向量长度小于行列的积,将循环补齐
#数组
#矩阵的元素可用两个下标访问,用多个下标访问的数据结构是数组
z=1:24;dim(z)=c(2,3,4);z
z1=1:24;dim(z1)=c(2,6,2);z1
#数据框
name=c(“张三”,“李四”,“王五”)
age=c(20,19,22)
high=c(175,177,165)
w=data.frame(name,age,high);w
#三角函数:正弦,余弦,正切,反三角函数
sin(0);sin(1);sin(pi/2) #正弦函数,注意括号内代表弧度制
cos(0);cos(1);cos(pi) #余弦
tan(0);tan(1);tan(pi) #正切
asin(0);acos(0);atan(0) #反三角函数
#反三角函数 定义 值域
#arcsin(x) = y sin(y) = x - pi/2 <= y <= pi/2
#arccos(x) = y cos(y) = x 0 <= y <= pi,
#arctan(x) = y tan(y) = x - pi/2 < y < pi/2
#arccsc(x) = y csc(y) = x - pi/2 <= y <= pi/2, y!=0
#arcsec(x) = y sec(y) = x 0 <= y <= pi, y!=pi/2
#arccot(x) = y cot(y) = x 0 < y < pi
install.packages(“ggplot2”)
library(ggplot2)
library(scales)
x坐标
x<-seq(-2pi,2pi,by=0.01)
y坐标
s1<-data.frame(x,y=sin(x),type=rep(‘sin’,length(x)))# 正弦
s2<-data.frame(x,y=cos(x),type=rep(‘cos’,length(x)))# 余弦
s3<-data.frame(x,y=tan(x),type=rep(‘tan’,length(x)))# 正切
s4<-data.frame(x,y=1/tan(x),type=rep(‘cot’,length(x)))# 余切
s5<-data.frame(x,y=1/sin(x),type=rep(‘sec’,length(x)))# 正割
s6<-data.frame(x,y=1/cos(x),type=rep(‘csc’,length(x)))# 余割
df<-rbind(s1,s2,s3,s4,s5,s6)
用ggplot2画图
g<-ggplot(df,aes(x,y))
g<-g+geom_line(aes(colour=type))
g<-g+scale_y_continuous(limits=c(0, 2))
g<-g+scale_x_continuous(breaks=seq(-2pi,2pi,by=pi),labels=c("-2pi","-pi",“0”,“pi”,"2pi"))
g
#反三角函数画图
x坐标
x<-seq(-1,1,by=0.005)
y坐标
s1<-data.frame(x,y=asin(x),type=rep(‘arcsin’,length(x)))
s2<-data.frame(x,y=acos(x),type=rep(‘arccos’,length(x)))
s3<-data.frame(x,y=atan(x),type=rep(‘arctan’,length(x)))
s4<-data.frame(x,y=1/atan(x),type=rep(‘arccot’,length(x)))
s5<-data.frame(x,y=1/asin(x),type=rep(‘arcsec’,length(x)))
s6<-data.frame(x,y=1/acos(x),type=rep(‘arccsc’,length(x)))
df<-rbind(s1,s2,s3,s4,s5,s6)
用ggplot2画图
g<-ggplot(df,aes(x,y))
g<-g+geom_line(aes(colour=type))
g<-g+scale_y_continuous(limits=c(-2pi,2pi),breaks=seq(-2pi,2pi,by=pi),labels=c("-2pi","-pi",“0”,“pi”,"2pi"))
g
#方程计算
#一元一次方程:a*x+b=0,设a=5,b=10,求x?
定义方程函数
f1 <- function (x, a, b) a*x+b
给a,b常数赋值
a<-5;b<-10
在(-10,10)的区间,精确度为0.0001位,计算方程的根
result <- uniroot(f1,c(-10,10),a=a,b=b,tol=0.0001)
result$root #显示方程的根
#一元二次方程:ax^2+bx+c=0,设a=1,b=5,c=6,求x?
f2 <- function (x, a, b, c) ax^2+bx+c
a<-1;b<-5;c<-6
result <- uniroot(f2,c(0,-2),a=a,b=b,c=c,tol=0.0001)
result$root
result <- uniroot(f2,c(-4,-3),a=a,b=b,c=c,tol=0.0001) #把参数带入方程,用uniroot()函数,我们就解出了方程的一个根,改变计算的区间,我们就可以得到另一个根。
result$root
result1 <- uniroot(f2,c(-100,-2),a=a,b=b,c=c,tol=0.0001);result1$root #由于uniroot()函数,每次只能计算一个根
result2 <- uniroot(f2,c(-3,15),a=a,b=b,c=c,tol=0.0001);result2$root #由于uniroot()函数,每次只能计算一个根
#一元多项式
a=c(-4,1,0,3);polyroot(a) #解方程3x^3+x-4=0,注意对应,可一次解除所有根
#加载rootSolve包,可解全部根
install.packages(“rootSolve”)
library(rootSolve)
uniroot.all(f2,c(-10,10),a=a,b=b,c=c,tol=0.0001)
#解多元线性方程组,解方程组3x1+5x2=4,x1+2x2=1,均可用矩阵形式求解
f1=matrix(c(3,5,1,2),nrow=2,byrow=T);f1
f2=matrix(c(4,1),nrow=2);f2
result3=solve(f1,f2);result3