R语言期末考试补充试题(参考大佬博客:紧到长不胖~)
fun1=function(n){
s=0
for(i in 1:n){
s=s+i^i
}
message('前n项和为:',s)
}
fun1(3)
fun2=function(n){
s=0
for(i in 1:n){
s=s+i
}
message('1到50的和为',s)
}
fun2(50)
fun3=function(n){
s=0
i=1
while(i<=n){
s=s+i
i=i+1
}
message('1到50的和用while算得',s)
}
fun3(50)
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))
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)
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)
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)
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)
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)
t_test_fun = function(A,B,alph=0.05){
a = A
b = B
n1 = length(a)
n2 = length(b)
a_bar = mean(a)
b_bar = mean(b)
message('a组均值:',a_bar,'\n')
message('b组均值:',b_bar,'\n')
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_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_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)
t_test_fun(A,B,alph = 0.05)