跳至主要内容

R 中的 for 循环

当您明确需要重复执行某个操作的次数时,for 循环是一个不错的选择。通过本教程掌握 for 循环。
· 5分钟 阅读

使用 AI 探索


通过我们的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"

# Loop over my_matrix
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 循环教程。

主题