R1_04 Class Notes
编程基础:控制流&函数入门
by YU,Xiang
Mar 24 2015
控制流(判断和循环)
判断 if,else,ifelse
if(statement) {
do something...
}
else {
do something else...
}
练习1
写一个if else语句,功能是:
当y是偶数时,打印出y的一半,当y是奇数时,打印出3y+1
y <- 17
if(y%%2==0) print(y/2) else print(3*y+1)
## [1] 52
ifelse(statement,do,do else)
练习2
使用ifelse再次完成练习1,想一想输出结果为什么不同
ifelse(y%%2==0, print(y/2), print(3*y+1))
## [1] 52
## [1] 52
ifelse(y%%2==0, y/2, 3*y+1)
## [1] 52
循环 for, while, repeat
for(x in something){
do ...
}
练习3
当y取1到10时,对每一个y做练习1
for(y in 1:10){
if(y%%2==0)
print(y/2)
else
print(3*y+1)
}
## [1] 4
## [1] 1
## [1] 10
## [1] 2
## [1] 16
## [1] 3
## [1] 22
## [1] 4
## [1] 28
## [1] 5
while(statement){
do ...
}
练习4
用while做练习3
y <- 1
while(y<=10){
if(y%%2==0)
print(y/2)
else
print(3*y+1)
y <- y+1
}
## [1] 4
## [1] 1
## [1] 10
## [1] 2
## [1] 16
## [1] 3
## [1] 22
## [1] 4
## [1] 28
## [1] 5
repeat{
do...
if(statement) break
}
练习5
用repeat做练习3
y <- 1
repeat{
if(y%%2==0)
print(y/2)
else
print(3*y+1)
y <- y+1
if(y > 10) break
}
## [1] 4
## [1] 1
## [1] 10
## [1] 2
## [1] 16
## [1] 3
## [1] 22
## [1] 4
## [1] 28
## [1] 5
函数
什么是函数
给定一些输入值,按照某种计算方法,得到一个结果.函数可以重复使用,能大大简化程序
f1 <- function(x){
if(x%%2==0) print(x/2)
else print(3*x+1)
}
函数的结构
function_name <- function(input1,input2,...){
do something...
return_value
}
练习6
写一个函数,对于输入
x
,输出数学公式
f2 <- function(x){
2*x+sin(x)-cos(x)
}
练习7
生成一个
n∗n
的矩阵,其中第
i
行
f3 <- function(n){
mat <- matrix(0,nrow=n,ncol=n)
for(i in 1:n){
for(j in 1:n){
mat[i,j] <- i^j
}
}
mat
}
练习8
Fibonacci数列是如下形式的数列:
1,1,2,3,5,8,13,21,...
请写一个函数 Fib <- function(N) 来生成Fibonacci数列的前N项
Fib <- function(N){
fib <- rep(0,N)
fib[1:2] <- c(1,1)
for(i in 3:N){
fib[i] <- fib[i-1] + fib[i-2]
}
fib
}
# 前二十项如下
Fib(20)
## [1] 1 1 2 3 5 8 13 21 34 55 89 144 233 377
## [15] 610 987 1597 2584 4181 6765