2021-01-04

R语言期末考试补充试题(参考大佬博客:紧到长不胖~)

#编写函数计算:1^1+2^2+...+n^n
fun1=function(n){
  s=0
  for(i in 1:n){
    s=s+i^i
    
  }
  message('前n项和为:',s)
}
fun1(3)


#编写函数计算1到50的和,分别用for循环和while循环
# """方法1"""
fun2=function(n){
  s=0
  for(i in 1:n){
    s=s+i
  }
  message('1到50的和为',s)
}
fun2(50)

# """方法2"""
fun3=function(n){
  s=0
  i=1
  while(i<=n){
    s=s+i
    i=i+1
  }
  message('1到50的和用while算得',s)
}
fun3(50)



#用循环函数求出1-100之间能被3和5整除的数的和,并输出结果。
k=100
a=c()
for(i in 1:k){
  if(i%%3==0 & i%%5==0){
    a=c(a,i)
  }
}
message('能被3和5整除的数:')
print(a)
message('和为:',sum(a))


#用循环函数求出1-100之间能被3或者5整除的数的和,并输出结果
k=100
a=c()
for(i in 1:k){
  if(i%%3==0 || i%%5==0){
    a=c(a,i)
  }
}
message('能被3和5整除的数:')
print(a)
message('和为:',sum(a))


#编写函数,计算给定任意两个维度相同的一维数组,
# 计算它们之间的欧氏距离。
fun5=function(a,b){
  if(length(a)!=length(b)){
    print('向量长度不一样,重新输入!')
  }else{
    dist_sum=0
    for(i in 1:length(a)){
      dist_sum=dist_sum+(a[i]-b[i])^2
    }
    dist_sum_=sqrt(dist_sum)
  }
  print(dist_sum_)
}
a=c(12,132,2424,12,2)
b=c(23,44,3,43,12)
fun5(a,b)


#编写函数,对任一个空气污染指数AQI,
# 将其转换成对应的等级,具体转换规则如下:
fun4=function(A){
  if(A<=50){
    print('优')
  }
  else if(A<=100){
    print('良')
  }
  else if(A<=150){
    print('轻度污染')
  }
  else if(A<=200){
    print('中度污染')
  }
  else if(A<=300){
    print('重度污染')
  }
  else{
    print('重度污染')
  }
}
fun4(40)


#设x服从泊松分布,编写函数,
# 任意给定x=k和参数λ的值,计算x=k的概率。
fun5=function(x,lamda){
  for(i in 1:x)
  y=lamda^x*exp(-lamda)
  y=y*(1/i)
  return(y)
}
fun5(1,1)
#校验
dpois(1,1)



#采用蒙特卡洛计算xlnx在3——8上的积分。
#方法一
decisionCondition=function(a){
  a[1]*log(a[1])-a[2]
}
n=10000
x=runif(n,3,8)
y=runif(n,0,8*log(8))
A=cbind(x,y)
A
b=apply(A,1,decisionCondition)
mean(b>=0)*(8-3)*8*log(8)


#方法二
n=10000
x=runif(n,3,8)
mean(x*log(x))*(8-3)


#给定两组数,检验其均值等于某一常数(t检验)
fun6=function(data,a){
  data1=data[[1]]
  data2=data[[2]]
  n1=length(data1)
  n2=length(data2)
  var1=var(data1)
  var2=var(data2)
  s=sqrt(((n1-1)*var1+(n2-1)*var2)/(n1+n2-2))
  mean1=mean(data1)
  mean2=mean(data2)
  t=(mean1=mean2)/(s*sqrt(((1/n1)+(1/n2))))
  t0=qt(p=1-a,df=n1+n2-2)
  Z=ifelse(abs(t)>t0,"输出:拒绝原假设,两组数据之间存在差异","输出:接受原假设,两组数据之间不存在差异")
  data.frame(n1,n2,var1,var2,s,mean1,mean2,t,t0,Z)
}
A=c(5.5,6.3,5.1,7.8,10.2,6.8,5.3)
B=c(5.9,4.0,7.3,9.5,6.1,5.7,9.0,8.1,4.3)
data=list(A,B)
fun6(data,0.05)


# 检验函数编写

# 法1 自写函数t.test检验函数
# 这里传入数据的列名为a,b
t_test_fun = function(A,B,alph=0.05){
  # 列数据作为计算对象
  a = A
  b = B
  # 1.计算基本量
  # 1.1向量a,b长度
  n1 = length(a)
  n2 = length(b)
  # 1.2计算a,b均值
  a_bar = mean(a)
  b_bar = mean(b)
  message('a组均值:',a_bar,'\n')
  message('b组均值:',b_bar,'\n')
  # 计算a,b方差
  var1 = var(a)
  var2 = var(b)
  message('a组方差:',var1,'\n')
  message('b组方差:',var2,'\n')
  # 求合并方差(方差齐性)
  concat_vars = (var1*(n1-1)+var2*(n2-1))/(n1+n2-2)
  message('联合方差为:',concat_vars,'\n')  
  # 计算t统计量
  t_statistic = (a_bar-b_bar)/(concat_vars*sqrt((1/n1+1/n2)))
  message('t统计量为:',t_statistic,'\n')
  # 计算自由度
  v = (n1+n2-2)
  message('自由度为:',v,'\n')
  #t分布临界值
  t_value = qt(alph,v)
  if (abs(t_statistic) > t_value){
    print('拒绝原假设,两组数据之间存在显著性差异')
  }else{
    print('接受原假设,两组数据之间不存在显著性差异')
  }
}

# 产生随机数
set.seed(0) 
A = c(5.5,6.3,5.1,7.8,10.2,6.8,5.3)
B = c(5.9,4.0,7.3,9.5,6.1,5.7,9.0,8.1,4.3)
# data1 = data.frame(a = A,b = B)
t_test_fun(A,B,alph = 0.05)








  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Persie...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值