作者:L鸿玖 | 来源:互联网 | 2023-08-18 12:51
#练习1:设计程序计算12+22+32+42+…+100^2n100S0for(iin1:n){SS+i**2}S#练习2:分别用repeat、while、for语句输出所有不大于
#练习1:设计程序计算12+22+32+42+…+100^2
n=100
S=0
for(i in 1:n) {
S=S+i**2
}
S
#练习2:分别用repeat、while、for语句输出所有不大于25且是5的倍数的正数
i<-5
system.time( repeat {
print(i) #程序不唯一,可以采用%%运算来执行
i<-i+5
if(i>25) {
break
}
})
i=5
system.time(while(i<=25) {print(i);i=i+5})
system.time(for(i in seq(5,25,5)) print(i))
#程序的效率(达到相同的效果,用的时间越短越有效)
#要求输出1,2,3,…300
#第一个程序
n=300
x=rep(0,n)
system.time(for(i in 1:n) {
x[i]=i
})
#第二个程序
n=3000000
x=1
system.time(for(i in 2:n) {
x[i]=i
})
x
#第三个程序
n=300
x=1:2
system.time(for(i in 3:n) {
x[i]=i
})
x
#编写一个计算1000以内的Fibonacci(斐波那契)数列1,1,2,3,5,8,13,21,…
f<-1;f[2]<-1;i<-1
while (f[i]+f[i+1]<1000) {
f[i+2]<-f[i]+f[i+1]
i<-i+1;}
f
z<-1;z[2]<-1;i<-1
repeat {
z[i+2]<-z[i]+z[i+1]
i<-i+1
if (z[i]+z[i+1]>=1000) break}
z
#switch语句
##switch分支语句
switch(1,mean(1:10),rnorm(4)) #执行mean(1:10)
switch(2,mean(1:10),rnorm(4)) #执行rnorm(4)
#由switch(x)来选择执行那个函数
x <- switch(
3,
"first",
"second",
"third",
"fourth"
)
print(x)
x <- switch(
3,
"third",
"second",
"first",
"fourth"
)
print(x)
switch("cc",a=1,cc=3,cd=5,d=2)
#看一个条件函数,详细掌握程序每一步的流程
x=3
for(i in 1:3) {
show(x)
if(x%%2==0) {
x=x/2
} else {
x=3*x+1
}
}
show(x)
#函数
#函数的基本形式
name<-function(argument1,argumen2,…) { #name表示函数名,argument表示变量名
expression1 #expression,output常规表达式
expression2
…
return(output)
}
#调用函数用name(arguement1,argument2…)
#自己编写变异系数
f1<- function(x) {
cv=sd(x)/mean(x)
return(cv)
}
f1(1:50)
#练习:试编写求均值,求标准差的程序
test1=function(x=1,y=1,z=1) {
return(x100+y10+z)
}
test1(2,2) #缺失赋值时,按照变量事先赋值补
test1(y=2,z=2)
test2=function(x,y,z) {
return(x100+y10+z)
}
test2(2,2) #提示错误,z缺失
test2(y=2,z=2) #提示错误,x缺失