【统计建模与R软件】第二章 R软件的使用 上机练习4 猴子吃桃 鸡兔同笼

上机练习及解析

10位同学的姓名、性别、年龄、身高、体重数据如下:

Name Sex Age Height Weight
Alice   F  13   56.5   84.0
Sandy   F  11   51.3   50.5
Sharon  F  15   62.5  112.5
Tammy   F  14   62.8  102.5
Alfred  M  14   69.0  112.5
Duke   M  14   63.5  102.5
Guido   M  15   67.0  133.0
Robert  M  12   64.8  128.0
Thomas  M  11   57.5   85.0
William M  15   66.5  112.0

1)a. 用数据框的形式读入数据,数据框的名称为my.class

# T1.1
setwd("C:/Users/87029/Desktop") # 设置工作路径
my.class = read.table("stu.txt",header=TRUE) # 读取文件stu.txt
class(my.class) # 验证数据类型

b. 将上述数据写成一个纯文本的文件(文件名为class.txt),并用函数read.table()读取文件中的身高和体重数据

# T1.2
write.table(my.class,file="student.txt")
read.table("student.txt",header=TRUE)$Height # 身高数据
read.table("student.txt",header=TRUE)$Weight # 体重数据

2)用函数rep()构造一个向量x,它由5个3,10个2,98个1构成

# T2
rep(c(3,2,1),c(5,10,98))
# rep中:
# 第一个参数为要输出的向量
# 第二个参数为该向量重复的次数,分别一一对应

3)使用for循环输出1至100之间的能够被3或5整除的数,并求和

# T3
sum = 0
for (i in 1:100) {
  if (i %% 3 == 0 | i %% 5 == 0) {
    sum = sum + i
  }
}
sum

4)自己编写一个函数,求数据y=(y1,y2,…,yn)的均值、标准差、偏度与峰度

# T4
# 求均值
my.mean = function(x) sum(x)/length(x)

# 求标准差
my.std = function(x) sum(((x-mean(x))^2)^0.5)

# 求偏度
my.kur = function(f) {
  fenzi = sum( (f-mean(f))^3 )/length(f)
  fenmu = ((sum( (f-mean(f))^2 )/(length(f)-1)))^(1.5)
  fenzi/fenmu
}

# 求峰度
my.skew = function(x) {
  fenzi = sum( (x-mean(x))^4 )/length(x)
  fenmu = ( sum(x-mean(x))^2/length(x) )^2
  (fenzi/fenmu)-3
}

5)鸡兔同笼问题:鸡和兔子关在一个笼子里,已知共有头36个,脚100个,编程求笼内关了多少只兔子和多少只鸡?

# T5
f = matrix(c(1,1,4,2),nrow=2,byrow=TRUE) # 方程系数
rf = matrix(c(36,100),nrow=2,byrow=FALSE) # 方程等数
result = solve(f,rf) # 解方程命令
result # 第一个数为x1,第二个为x2,以此类推

6)猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第10天早上想再吃时,见只剩一个桃子了,编程求第一天共摘多少桃子

# T6
getPeaches = function(n) { # 求第n天的桃子数量
  if (n==10) { return(1) } # 第10天,剩余1个桃子
  else {
    return((getPeaches(n+1)+1)*2)
  }
}
getPeaches(1)

7)

【统计建模与R软件】第二章 R软件的使用 上机练习4 猴子吃桃 鸡兔同笼

# T7
# 这题不会,哈哈
# 之前不知道从哪儿复制粘贴的,看不懂别问我,我也不懂= =

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,Fval=obj$f)
}

fun<-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(fun,c(0,1))

8)画出身高的散点图和茎叶图,再画出体重盒形图和直方图

身高体重数据如下:

weight height
4.17 1.75
5.58 1.8
5.18 1.65
6.11 1.9
4.5 1.74
4.61 1.91
5.17 1.75
4.53 1.8
5.33 1.65
5.14 1.9
4.81 1.74
4.17 1.91
4.41 1.75
3.59 1.8
5.87 1.65
3.83 1.9
6.03 1.74
4.89 1.91
4.32 1.75
4.69 1.8

代码:

# T8
data = read.table("HW.txt",header=T)

plot(data$height) # 身高散点图
stem(data$height) # 身高茎叶图

boxplot(data$weight) # 体重箱型图
hist(data$weight) # 体重直方图
上一篇:Go 语言类型转换


下一篇:单变量线性回归的三种评价方法