R语言条件、循环、函数

这篇R学习笔记介绍了条件判断,包括if、else和逻辑运算,以及循环结构如repeat、while和for循环的使用。同时讲解了set.seed函数在生成随机数中的应用,以及如何创建和使用自定义函数,包括设置缺省参数。强调了R语言的向量化特性,并通过实例展示了向量化操作可能导致的错误。此外,还提供了数据标准化和累加计算的函数示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列为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课程
### R语言 `for` 循环使用方法 #### 基本结构 `for` 循环用于遍历一个序列(如列表、向量),对于每一个元素执行指定的操作。基本语法如下: ```r for (item in vector){ # 执行代码块 } ``` 这里,`vector` 可以是任何类型的向量,而不仅仅是数值型;它可以是一个字符向量或者其他对象[^1]。 #### 实际应用案例 考虑创建一个简单的例子来展示如何利用 `for` 循环打印一系列数字: ```r numbers <- c(1, 2, 3, 4, 5) for(num in numbers){ print(paste("当前数字:", num)) } ``` 这段程序会依次输出每个数,并附带说明文字 "当前数字:"。 #### 结合数据框操作 如果希望基于某个条件处理数据框中的每一列,则可以通过组合 `for` 和其他功能实现更复杂的数据分析任务。下面的例子展示了怎样计算给定数据集中各变量的标准差: ```r library(tidyverse) df <- tibble( a = rnorm(10), b = rnorm(10), c = rnorm(10), d = rnorm(10) ) results <- numeric() for(col_name in colnames(df)){ results[col_name] <- sd(df[[col_name]]) } print(results) ``` 此脚本首先初始化了一个空的数值型向量 `results` 来存储结果,接着通过访问 `data.frame` 的列名来进行迭代,在每次循环中计算对应列的标准偏差并将之保存到 `results` 向量里[^2]。 #### 处理多层嵌套情况 有时候可能需要在一个更大的范围内多次运行相同的逻辑,这时就可以采用多重 `for` 循环的方式。例如绘制一组散点图时,外层循环负责改变绘图参数,内层则完成实际作图工作[^4]: ```r plots_list <- list() for(i in seq_along(mtcars$mpg)){ p <- ggplot(data=mtcars, aes_string(x="wt", y=names(mtcars)[i])) + geom_point() plots_list[[i]] <- p } gridExtra::grid.arrange(grobs=plots_list, nrow=3) ``` 上述代码片段实现了根据不同属性对比汽车重量 (`wt`) 对不同性能指标的影响,最终排列显示这些图形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值