本书作者: 吴喜之
操作系统:win10
R版本:R-3.3.3
实践6 —— 简单图形
x <- rnorm(200) #获取200个随机正态数
hist(x, col = "light blue") #绘制直方图
rug(x) #在直方图下方添加实际数值所在位置
stem(x) #绘制茎叶图
x <- rnorm(500)
y <- x + rnorm(500) #构造线性关系
plot(y~x) #绘制散点图
a = lm(y~x)
abline(a, col="red") #基于plot添加拟合线
plot(y~x)
abline(lm(y~x), col="red") #一步完成,绘制散点图,同时添加拟合线,注意同样基于plot
print ("Hello World!") #直接打印语句
paste("x的最小值= ", min(x)) #打印语句
demo(graphics) #演示R中自带的图形
实践7 —— 复数运算和求函数极值
(2+4i)^-3.5 + (4.5+2i)*(-1.7-2.3i)/((2.6-7i)*(-4+5.1i)) #进行复数运算
(z <- complex(real=rnorm(10), imaginary=rnorm(10))) #构造一个10维复向量,实部和虚部均为10个标准状态样本点
complex(real=rnorm(10), imaginary=rnorm(5)) #如果实部和虚部的样本点个数不同,看看与前一命令有何不同。
Re(z) #列出z中所有复向量的实部
Im(z) #列出z中所有复向量的虚部
Mod(z) #计算各个复向量的模。复数的模为实部与虚部平方和的正平方根。
Arg(z) #计算各个复向量的辐角。在复平面上,复数所对应的向量与x轴正反向的夹角称为复数的辐角。可以注意一下,辐角的符号与虚部的符号一致。
choose(10, 4) #组合数。C(n, m),从n个元素中不重复地抽取m个元素的组合个数。 C(n, m)=n!/(m!(n-m)!)
combn(5, 2) #列出所有组合
factorial(6) #计算6的阶乘,即6!
f = function(x) x^3-2*x-1 #构建方程式
uniroot(f, c(0, 2)) #迭代求根。结果中$root 为求解出来的方程近似解;$f.root 为在此近似解下的方程值;$iter 为求解过程中,方程的迭代次数;$estim.prec 为近似解与较精确解的误差估计,即近似解与较精确解之间误差的值不超过这个数值。
optimize(f, c(0, 2)) # 计算给定区间内的极值
optimize(f, c(1, 3)) # 注意与前一个命令结果之间的差别。我还不是特别明白里面的含义。
#在R语言中,我们可以借助uniroot()函数来求解方程的某个单根。对于一元一次方程,需要调用uniroot()一次;由于二次方程一般有2个根,所以对于一元二次方程,需要调用uniroot()两次。
#题目:求一元二次方程ax^2+bx+c=0,设a=1,b=5,c=6,求x
f <- function(x, a, b, c) a*x^2+b*x+c
a <- 1; b <- 5; c <- 6
result1 <- uniroot(f, c(0, -2), a=a, b=b, c=c, tol=0.0001)
result2 <- uniroot(f, c(-3, -4), a=a, b=b, c=c, tol=0.0001)
result1$root
result2$root
#也可以用作图的方式求解
x <- seq(-5, 1, by=0.01)
y <- f(x, a, b, c)
df <- data.frame(x, y)
library(ggplot2)
g <- ggplot(df, aes(x, y))
g <- g + geom_line(col="red")
g <- g + geom_hline(yintercept=0) + geom_vline(xintercept=0)
g <- g + ggtitle(paste("y=", "x^2+", b, "x+", c))
g #从图中我们可以得到该方程的两个根
实践6主要介绍R的作图功能,强大的绘图功能正是许多人喜欢R的原因之一;实践7开始涉及基础运算,需要结合相应的数学知识慢慢理解。