R学习笔记2_初级

  • 条件
  • 生成条件
  • 条件运算
  • 循环
  • repeat循环
  • while循环
  • for循环
  • set.seed随机数
  • 两重循环
  • 函数
  • mean均值函数
  • 自定义函数
  • 缺省参数



条件

生成条件

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课程