本系列为R语言系统学习笔记,已收录至“R语言笔记”专栏,可戳右下角专栏目录订阅,空余时间会持续更新。往期文章:
0. R的下载与安装 vs Rstudio报错
1. R语言向量、矩阵、数组、数据框
条件
生成条件
i <- 1
if(i>10)print('i is positive')else
print('i is negative') #i大于10,打印i is positive,不大于10,打印i is negative
i <- -1
if(i>0 & i<2)print('i=1')else
print('i don\'t known') #注意在引号内使用引号时,需在前加\
条件运算
x <- 1
if(x > 2)
{
y = 2 * x
z = 3 * y #放在同一行需要中间加分号
}else #else也必须紧跟在if大括号后面才能识别
{
y = 2 + x
z = 2 * y
} #大括号用于语句
y;z #输出y和z
- R语言侧重向量化操作
x <- 10
y <- c(8,10,12,3,17)
if(y<x) x else y
- 注释
此语句本意是若y<x就输出x,否则输出y。但由于R语言侧重向量操作,x与y比较,代表x分别和y中的每个元素比较。故不是输出1个值,而是输出5个逻辑值:TRUE FALSE FALSE TRUE FALSE。又 if 函数只认第一个值TRUE,所以会报错
循环
注意:与Python不同,在R语言中不建议用循环,因为逻辑更侧重于向量化操作
repeat循环
i <- 5
repeat{if(i > 25) break else #break代表跳出循环
{print(i)
i <- i + 5}
}
while循环
i <- 5
while (i<=25) {
print(i)
i <- i + 5
} #使用while当满足xxx条件时输出xxx
for循环
for (i in 1:10) {
print(i)
} #使用for语句循环
set.seed随机数
set.seed(2022) #生成一个随机数种子
x <- sample(10:100,10) #在10-100中随机取10个数
y <- sample(1:100,10) #在1-100中随机取10个数
z <- NULL
for (i in 1:10) {
z[i] = x[i]>y[i]
}
z
set.seed(2022)
x <- sample(10:100,10)
y <- sample(1:100,10)
z <- NULL
for (i in 1:10) {
if(x[1]>y[i]){
z = append(z,x[i])
}
}
z
两重循环
mat <- matrix(NA,nrow = 4,ncol = 5) #设置一个4x5的空矩阵
for (i in 1:4) {
for (j in 1:5) {
mat[i,j] <- 2 #i行j列都赋值为2
}
}
mat #两重循环填入行和列
函数
mean均值函数
mean(c(1:5,NA)) #有NA在计算出的均值也是NA
mean(c(1:5,NA),na.rm = TRUE) #所以这里设置去除NA,就可以输出均值了
自定义函数
my_fun1 <- function(x,y){ #将function设置成2个参数x和y
x + y #函数体包含在大括号里面
} #这时候my_fun1就可以作为函数直接使用了
my_fun1(1,2) #使用my_fun1函数
my_fun2 <- function(x,y = 2){ #将y默认设置成2
x + y
}
my_fun2(1) #这时只传入x的值就可以了
my_fun2(1,3) #y写为3也可
缺省参数
values <- c(sqrt(1:100)) #求1-100的平方根
my_fun3 <- function(x,...){
print(x)
summary(...)} #summary函数可输出数据基本信息
my_fun3('Here is summary for values:',values,digits=2)
- addeup函数
addemup <- function(x,...){
args <- list(...)
for (a in args)x <- x + a
x
}
addemup(1,2,3,4,5)
- 标准化函数
normalize <- function(x,m = mean(x,...),s = sd(x,...),...){
(x - m)/s
} #数据标准化函数
normalize(x = 1:100)
- cr.leopard课程