Вложенный для циклов отображает только последнюю итерацию - PullRequest
1 голос
/ 19 марта 2020

Я создал функцию, которая фильтрует фрейм данных на основе некоторых уникальных значений 2 разных столбцов. Я пытаюсь l oop через уникальные значения типа ячейки (3), а также уникальные значения из другого столбца под названием Cell_line (2). Я создал два списка для хранения этой информации и использую вложенный l oop для подсчета каждого. Новый Dataframe представляется последней итерацией каждого списка (cell_line и types) и пропускает другие выходные данные. Как я могу получить это тоже. будет работать либо список данных, либо один кадр со всей информацией, связанной вместе

### My function takes a few arguments and gives a new dataframe
myfunction <- function(data_frame,type,Cell) {
    prism <- df2%>% 
    ungroup() %>% 
    filter(.,TYPE == type & Cell_Line == Cell) %>%
    pivot_wider(., id_cols = c("Treatment_rep","value","lipid"),
        names_from = Treatment_rep, values_from = value)
    prism$Cell_line <- Cell
    prism  
}



### I'm attempting to feed these into my function iteratively
cell_lines <- unique(df2$Cell_Line)              ## list of 3 types
types <- unique(df2$TYPE)                        ### list of 2 types




### nested loop
for (i in 1:length(types)) {
    for(j in 1: length(cell_lines)) {
        newdf <- myfunction(data_frame = df2, type = types[i], Cell = cell_lines[j])
    }
}

1 Ответ

1 голос
/ 19 марта 2020

Вы можете сделать это

dflist <- list()

for (i in 1:length(types)){
  for(j in 1: length(cell_lines)){
    newdf <- myfunction(data_frame = df2, type = types[i], Cell = cell_lines[j])
    dflist[[ length(dflist)+1 ]] <- newdf
  }
}

И если впоследствии вы захотите связать их всех вместе

df_total <- do.call(rbind, datalist)
...