R语言编程基础(2)

#练习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缺失

猜你喜欢

转载自blog.csdn.net/weixin_44723899/article/details/88659310