R语言基本计算

#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

猜你喜欢

转载自blog.csdn.net/weixin_44723899/article/details/88657420