入门必学 | R语言for循环入门指导

文章目录

在R语言中,「迭代」是一种减少重复代码的重要工具。它的作用在于可以对多个输入执行同一种处理,比如对多个列或多个数据集进行同样的操作。本节我们将介绍一种重要的迭代方式:for循环。for循环的运行过程十分简洁明了,是掌握迭代的很好的学习起点。

何为for循环

在R语言中,当你希望相同的代码块使用不同的输入值执行多次时。你可以利用for循环对一个序列或数组进行迭代,然后在for循环中进行(子)数据的创建、修改与分析等多种操作,执行你想重复多次的运算。

一个基本的for循环的结构如下:

r 复制代码
output<- #输出
for (i in sequence) {#序列
  # 每次迭代时要执行的代码 #循环体
}

每个for循环都包括3个部分.

-「输出output」:在开始循环前,你必须为输出结果分配足够的空间,并提供一个"盒子"把你的循环结果装起来。根据结果的类型,可以为向量,数据框或者列表等。

-「序列i in sequence」:这部分确定了使用哪些值来进行循环,每一轮for循环都会赋予i一个来自sequence的不同的值。因此,你可以把i看成一个代词,在每次重复中,i都会发生变化。

-「循环体」:这部分就是执行具体操作的代码。它们会重复运行,每次运行都使用一个不同的i值。

我们什么时候该使用for循环

假设我们有以下这样一个简单的数据集

r 复制代码
set.seed(123)
df<- data.frame(
a = rnorm(10),
b = rnorm(10), 
c = rnorm(10), 
d = rnorm(10))

> df
             a          b          c           d
1  -0.56047565  1.2240818 -1.0678237  0.42646422
2  -0.23017749  0.3598138 -0.2179749 -0.29507148
3   1.55870831  0.4007715 -1.0260044  0.89512566
4   0.07050839  0.1106827 -0.7288912  0.87813349
5   0.12928774 -0.5558411 -0.6250393  0.82158108
6   1.71506499  1.7869131 -1.6866933  0.68864025
7   0.46091621  0.4978505  0.8377870  0.55391765
8  -1.26506123 -1.9666172  0.1533731 -0.06191171
9  -0.68685285  0.7013559 -1.1381369 -0.30596266
10 -0.44566197 -0.4727914  1.2538149 -0.38047100

我们想要计算出每列的平均数。完全可以使用复制粘贴来完成这个任务:

r 复制代码
> mean(df$a)
[1] 0.07462564
> mean(df$b)
[1] 0.208622
> mean(df$c)
[1] -0.4245589
> mean(df$d)
[1] 0.3220446

但这样做就违反了我们的经验法则:永远不要复制粘贴超过2次。相反,我们应该使用for循环:

r 复制代码
output<- c() #输出
for (i in 1:ncol(df)) { #序列
  output[i] <- mean(df[,i]) #循环体
} 

> output
[1]  0.07462564  0.20862196 -0.42455887  0.32204455

这样就自动得到了我们想要的结果。细节可以参考文中代码,有疑惑可以留言讨论~

相关推荐
2401_873479405 小时前
如何利用IP查询定位识别电商刷单?4个关键指标+工具配置方案
开发语言·tcp/ip·php
我爱cope5 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
菜鸟学Python5 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
浪浪小洋6 小时前
c++ qt课设定制
开发语言·c++
charlie1145141916 小时前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
故事和你916 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
程序猿编码7 小时前
给你的网络流量穿件“隐形衣“:手把手教你用对称加密打造透明安全隧道
linux·开发语言·网络·安全·linux内核
aq55356008 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
aq55356008 小时前
PHP vs Python:30秒看懂核心区别
开发语言·python·php
我是无敌小恐龙8 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习