Вложенный применяется с несколькими параметрами - PullRequest
0 голосов
/ 04 ноября 2019

Я хотел бы использовать семейство apply вместо цикла for.

Мой цикл for является вложенным и содержит несколько векторов и список, для которого я не уверен, как вводить в качестве параметров с apply.

Codes <- c("A","B","C")
Samples <- c("A","A","B","B","B","C")
Samples_Names <- c("A1","A2","B1","B2","B3","C1")
Samples_folder <- c("Alpha","Alpha","Beta","Beta","Beta","Charlie")
Df <- list(data.frame(T1 = c(1,2,3)), data.frame(T1 = c(1,2,3)), data.frame(T1 = c(1,2,3)))


for (i in 1:length(Codes)){

  for (j in 1:length(Samples)) {

    if(Codes[i] == Samples[j]) {

      write_csv(Df[[i]], path = paste0(Working_Directory,Samples_folder[j],"/",Samples_Names[j],".csv"))

    }
  }
}

Это даст выход A1, A2 в альфе, B1, B2, B3 в бета-версии и C1 в Чарли.

1 Ответ

1 голос
/ 04 ноября 2019

Поскольку вы хотите просто использовать write_csv, мы можем использовать pwalk из purrr, чтобы выполнить это для трех векторов одинакового размера. Не нужно включать цикл в Codes, поскольку для каждой итерации в применении мы можем write_csv набор данных, соответствующий тому, где Samples находится в Codes.

Я сократил Working_Directory доWD.

library(purrr)

pwalk(list(Samples, Samples_folder, Samples_Names), 
      function(x, y, z) write_csv(Df[[match(x, Codes)]], path = paste0(WD, y, "/", z, ".csv")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...