Определение динамических переменных в цикле и объединение контента - PullRequest
0 голосов
/ 12 февраля 2019

Я новичок в 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.Я знаю, что быть новым означает, что я, возможно, недостаточно четко выразил свои потребности;пожалуйста, дайте мне знать, и я постараюсь объяснить более подробно.Спасибо!

1 Ответ

0 голосов
/ 13 февраля 2019

Хитрость заключалась в том, чтобы сначала сохранить данные в дополнительной переменной «а», а затем использовать «а», чтобы присвоить данные конечной переменной

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)
  }
}
...