通过我们的R 入门课程掌握 for 循环和其他必备 R 函数。
遍历向量
当您明确想要重复执行某个操作的次数时,for 循环是一个不错的选择。for 循环的思想是:您按顺序逐个遍历一个序列,并在每一步执行一段操作。这个序列通常是一个数字向量(比如 1:10),也可以是无序的数字,如 c(2, 5, 4, 6),甚至是一串字符!
for (value in sequence) {
code
}技术支持
通俗地说,就是“对于序列中的每个值,运行这段代码”。例如:“对于数据框的每一行,打印第 1 列”,或“对于句子中的每个单词,检查该单词是否为 DataCamp”。
我们来试一个例子!首先,您将创建一个循环,打印从 1 到 10 的序列中的值。然后,您会修改该循环,将 1 到 10 的值求和:在每次迭代时,将序列中的下一个值加到累计和上。
操作说明
已为您创建向量 seq。在 for 循环中填入代码,使用 seq 作为序列。在每次迭代中打印 value。已为您创建变量 sum。使用循环对 seq 中的数字求和。每次迭代,将 value 加到 sum,然后打印 sum。
如果理解没问题,请继续下一道练习!如果还不清楚,请观看下面的概览视频。
R 中 for 循环概览视频
遍历数据框的行
假设您想找出苹果股价高于 117 的日期。如果超过该值,您希望打印出当前日期和股价。如果您有一个包含 date 和 apple 价格列的 stock 数据框,能否遍历数据框的各行来完成这个任务?当然可以!
在此之前,请注意,您可以使用 nrow(stock) 获取数据框的行数。然后,您可以创建一个从 1:nrow(stock) 的序列来进行循环。
for (row in 1:nrow(stock)) {
price <- stock[row, "apple"]
date <- stock[row, "date"]
if(price > 117) {
print(paste("On", date,
"the stock price was", price))
}
}
[1] "On 2016-12-21 the stock price was 117.06"
[1] "On 2016-12-27 the stock price was 117.26"技术支持
这段代码综合了我们目前学到的多项内容:if 条件语句、向量子集、条件判断以及循环!恭喜您已经学到了这么多!
操作说明
stock 已在您的工作区中。
补全 for 循环中的空白,使以下条件成立:
price 应保存本次迭代的价格
date 应保存本次迭代的日期
- 这次,您想知道
apple 是否高于 116。
- 如果高于,则打印该
date 和 price。
- 如果低于
116,则打印该 date,并打印这不是重要的一天!
# Loop over stock rows
for (row in 1:___) {
price <- stock[___, "___"]
date <- stock[___, "___"]
if(___ > ___) {
print(paste("On", ___,
"the stock price was", ___))
} else {
print(paste("The date: ___,
"is not an important day!"))
}
}
遍历矩阵元素
到目前为止,您一直在遍历一维数据类型。如果您想遍历矩阵(列与行)中的元素,则需要使用嵌套循环。接下来,您将用这一思路打印三只股票之间的相关系数。
最简单的理解方式是:从第 1 行开始,向右移动,依次访问第 1 列、第 2 列,……直到第 1 行的最后一列。然后下移到第 2 行,重复这一过程。
my_matrix
[,1] [,2]
[1,] "r1c1" "r1c2"
[2,] "r2c1" "r2c2"
for(row in 1:nrow(my_matrix)) {
for(col in 1:ncol(my_matrix)) {
print(my_matrix[row, col])
}
}
[1] "r1c1"
[1] "r1c2"
[1] "r2c1"
[1] "r2c2"技术支持
操作说明
相关矩阵 corr 已在您的工作区中。
- 打印
corr 以先查看数据概况。
- 补全嵌套 for 循环!应满足以下要求:
- 外层循环应遍历
corr 的各个 row。
- 内层循环应遍历
corr 的各个 col。
- 打印语句应打印当前列名与行名,并打印它们的相关系数。
# Print out corr
# Create a nested loop
for(row in 1:nrow(___)) {
for(col in 1:___(corr)) {
print(paste(colnames(corr)[___], "and", rownames(corr)[___],
"have a correlation of", corr[row,col]))
}
}
也可以查看我们的R 循环教程。
通过我们的R 入门课程掌握 for 循环和其他必备 R 函数。
遍历向量
当您明确想要重复执行某个操作的次数时,for 循环是一个不错的选择。for 循环的思想是:您按顺序逐个遍历一个序列,并在每一步执行一段操作。这个序列通常是一个数字向量(比如
1:10),也可以是无序的数字,如c(2, 5, 4, 6),甚至是一串字符!通俗地说,就是“对于序列中的每个值,运行这段代码”。例如:“对于数据框的每一行,打印第 1 列”,或“对于句子中的每个单词,检查该单词是否为 DataCamp”。
我们来试一个例子!首先,您将创建一个循环,打印从 1 到 10 的序列中的值。然后,您会修改该循环,将 1 到 10 的值求和:在每次迭代时,将序列中的下一个值加到累计和上。
操作说明
已为您创建向量
seq。在 for 循环中填入代码,使用seq作为序列。在每次迭代中打印value。已为您创建变量sum。使用循环对seq中的数字求和。每次迭代,将value加到sum,然后打印sum。如果理解没问题,请继续下一道练习!如果还不清楚,请观看下面的概览视频。
R 中 for 循环概览视频
遍历数据框的行
假设您想找出苹果股价高于
117的日期。如果超过该值,您希望打印出当前日期和股价。如果您有一个包含date和apple价格列的stock数据框,能否遍历数据框的各行来完成这个任务?当然可以!在此之前,请注意,您可以使用
nrow(stock)获取数据框的行数。然后,您可以创建一个从1:nrow(stock)的序列来进行循环。这段代码综合了我们目前学到的多项内容:if 条件语句、向量子集、条件判断以及循环!恭喜您已经学到了这么多!
操作说明
stock已在您的工作区中。补全 for 循环中的空白,使以下条件成立:
price应保存本次迭代的价格date应保存本次迭代的日期apple是否高于116。date和price。116,则打印该date,并打印这不是重要的一天!遍历矩阵元素
到目前为止,您一直在遍历一维数据类型。如果您想遍历矩阵(列与行)中的元素,则需要使用嵌套循环。接下来,您将用这一思路打印三只股票之间的相关系数。
最简单的理解方式是:从第 1 行开始,向右移动,依次访问第 1 列、第 2 列,……直到第 1 行的最后一列。然后下移到第 2 行,重复这一过程。
操作说明
相关矩阵
corr已在您的工作区中。corr以先查看数据概况。corr的各个row。corr的各个col。也可以查看我们的R 循环教程。