Я новичок в R и не могу понять следующую проблему при динамическом присвоении нескольких значений переменным в двойном цикле:
Я хочу создать переменные, отличающиеся а) их именами, которые уже сохраненыв 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])))
Как я могу изменить свой цикл так, чтобы мои конечные переменные содержали соответствующие значения всех листов?С образцом листа результат должен выглядеть как список из 3 для каждого из a, b и c.Я знаю, что быть новым означает, что я, возможно, недостаточно четко выразил свои потребности;пожалуйста, дайте мне знать, и я постараюсь объяснить более подробно.Спасибо!