首页 > 解决方案 > 在循环中定义动态变量并组合内容

问题描述

我是 R 新手,在双循环中为变量动态分配多个值时无法解决以下问题:

我想生成不同的变量 a) 它们的名称已经存储在 var_names b) 通过循环工作表名称将来自 excel 文件的数据放入其中

假设一个 excel 文件有 3 张;我为这个例子编译了一个;你可以在这里找到它。

var_names <- c("a", "b", "c")
cell_ranges <- c("A1:A2", "B1:B2", "C1:C2")
sheet_names <- c("sheet_1", "sheet_2", "sheet_3")

对于单个变量 x,代码如下所示:

x <- c()
for (sheet in sheet_names) {
    x<-c(x, read_excel("file.xls", sheet = sheet, range="cell range that
                        fits x; e.g., A1:A2"))
}

但我不想对每个变量都这样做;我希望将这些循环作为计算变量,类似于:

for (i in 1:length(cell_ranges)) {
  for(sheet in sheet_names){
    assign(paste(var_names[i], "", sep=""),
           read_excel("file.xls", sheet = sheet,
                      range=cell_ranges[i]))
  }
}

不用说,它不起作用,因为只有最后一张 excel 表中的值存储在相应的变量中。

我试图改变这样的分配代码,但它没有用

assign(paste(var_names[i], "", sep=""),
       c(var_names[i],
         read_excel("file.xls", sheet = sheet, range=cell_ranges[i])))

如何更改循环以使最终变量包含所有工作表的相应值?使用样本表,结果应该看起来像 a、b 和 c 中的每一个的 3 个列表。我知道成为新人意味着我可能没有足够清楚地表达我的需求;请让我知道,我会尝试更详细地解释。谢谢!

标签: rloopsdynamicvariable-names

解决方案


诀窍是首先将数据存储在附加变量“a”中,然后使用“a”将数据分配给最终变量

for (i in 1:length(cell_ranges)) {
  a <- c()
  for(sheet in sheet_names) {
    a <- c(a, read_excel("file.xlsx", sheet = sheet,range=cell_ranges[i]))
    assign(var_names[i], a)
  }
}

推荐阅读