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