循环定义动态变量并合并内容

时间:2019-02-12 11:18:13

标签: r loops dynamic variable-names

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

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

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

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的列表。 我知道,成为新人意味着我可能没有足够清楚地表达自己的需求。请让我知道,我将尝试更详细地解释。谢谢!

1 个答案:

答案 0 :(得分:0)

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

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val view = layoutInflater.inflate(R.layout.dialog_change_number, null, false)
        setContentView(view)
        setCanceledOnTouchOutside(false)
        setCancelable(true)
        tvSubmit.setOnClickListener(this)
    }

  override fun onClick(view: View) {
    when (view.id) {
        R.id.tvSubmit -> {
            onSubmitClicked(etNumber.text.toString().trim())
            dismiss()
          }
       }
  }