文章目录
在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
这样就自动得到了我们想要的结果。细节可以参考文中代码,有疑惑可以留言讨论~