Назначение нескольких переменных в цикле for - PullRequest
1 голос
/ 22 сентября 2019

У меня есть фрагмент кода, который повторяется 7 раз, и я пытаюсь сжать код.Я пытаюсь запустить функцию, а файлы raw_data_* являются фреймами данных.Это то, что я пытаюсь достичь (неконденсированный код):

tax_1 <- count_taxa(raw_data_1, "Site_1", "Domain", domain_n)
tax_2 <- count_taxa(raw_data_2, "Site_2", "Domain", domain_n)
tax_3 <- count_taxa(raw_data_3, "Site_3", "Domain", domain_n)
tax_4 <- count_taxa(raw_data_4, "Site_4", "Domain", domain_n)
tax_5 <- count_taxa(raw_data_5, "Site_5", "Domain", domain_n)
tax_6 <- count_taxa(raw_data_6, "Site_6", "Domain", domain_n)
tax_7 <- count_taxa(raw_data_7, "Site_7", "Domain", domain_n)
all_tax <- bind_rows(tax_1, tax_2, tax_3, tax_4, tax_5, tax_6, tax_7)

И я пытаюсь сделать что-то вроде этого:

tax_list <- list(raw_data_1, raw_data_2, raw_data_3, raw_data_4, raw_data_5, raw_data_6, raw_data_7)
site_list <- list("Site_1", "Site_2", "Site_3", "Site_4", "Site_5", "Site_6", "Site_7")

for (tax in tax_list) {

  tax_1 <- count_taxa(tax, site, domain_n)
????

}
all_tax <- bind_rows(tax_1, tax_2, tax_3, tax_4, tax_5, tax_6, tax_7)

Но я понятия не имею, если этоэто даже возможно.Есть идеи?

1 Ответ

0 голосов
/ 22 сентября 2019

Вы можете создать пустой список, а затем добавить к нему фреймы данных в ходе цикла.В конце концов, вы можете связать их все в all_tax, используя Reduce.

tax_list <- list(raw_data_1, raw_data_2, raw_data_3, raw_data_4, raw_data_5, raw_data_6, raw_data_7)
site_list <- list("Site_1", "Site_2", "Site_3", "Site_4", "Site_5", "Site_6", "Site_7")

proc_df <- list()

for (i in seq_along(tax_list)) {
  proc_df <- c(proc_df, count_taxa(tax_list[[i]], site_list[[i]], domain_n))
}

all_tax <- Reduce(rbind, proc_df)

Альтернативой может быть использование функции map2_dfr из purrr:

purrr::map2_dfr(tax_list, site_list, count_taxa, domain_n)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...