在循环中使用变量命名 R 中的数据框

Use a variable in a loop to name a data frame in R

我有 8 个 .csv 文件,每个文件包含 8 个湖泊的每日水位。我想创建一个循环来将这些文件中的每一个读入 R 并相应地命名它们。如何让循环为 R 数据框生成名称?以下是我尝试过的方法,我理解为什么它在循环的最后一行不起作用(但我不确定是否有其他选择)。我希望数据帧命名为 Okareka_daily_levels、Okaro_daily_levels、....等

Lake_names <- cbind("Okareka", "Okaro", "Okataina", "Rerewhakaaitu", "Rotokakahi", "Rotomahana", "Tarawera", "Tikitapu")

  
for (i in 1:8){
    name <- Lake_names[i]
    read_file <- gsub(" ", "", paste("Data\", name, "_daily_levels.csv"))
    write_name <- gsub(" ", "", paste(name, "_daily_levels"))
    write_name <- as_tibble(read.csv(read_file)) # read file with lake elevations
  }

您在循环的每次评估中都覆盖了 write_name,因此您可能只获得了最后一个湖泊名称 (Tikitapu) 的内容。 for 循环中使用的惰性评估可能也无济于事。解决此问题的一种方法是将 for 循环转换为 lapply:

library(tidyverse)

listOfTibbles <- lapply(
                   1:8,
                   function(i) {
                     name <- Lake_names[i]
                     read_file <- gsub(" ", "", paste("Data\", name, "_daily_levels.csv"))
                     write_name <- gsub(" ", "", paste(name, "_daily_levels"))
                     # Note the edit to the next line: you need a return value.
                     as_tibble(read.csv(read_file)) # read file with lake elevations
                   }
                 )

lapply returns 一个列表,列表的每个元素都是将其第二个参数中定义的函数依次应用于第一个参数的元素的结果。所以你应该从这段代码中得到一个包含八个 tibbles 的列表。要将小标题列表合并为一个小标题,您可以

oneBigTibble <- listOfTibbles %>% bind_rows()

这是未经测试的代码,因为我无法访问您的 CSV 文件。