Сохранение кадров данных в значениях в списке

James Loy спросил: 12 мая 2018 в 05:13 в: r

У меня есть список названий, которые я бы хотел перебрать и создать / сохранить кадры данных. Я попытался использовать функцию paste() (как показано ниже), но это не работает для меня. Любые советы будут очень благодарны.

samples <- list("A","B","C")for (i in samples){ 
    paste(i,sumT,sep="_") <- data.frame(col1=NA,col1=NA)
    }

Мой желаемый результат состоит из трех пустых фреймов данных: A_sumT, B_sumT и C_sumT

2 ответа

TBT8 ответил: 12 мая 2018 в 05:32

Вот ответ с purrr.

samples <- list("A", "B", "C")samples %>% 
     purrr::map(~ data.frame()) %>% 
     purrr::set_names(~ paste(samples, "sumT", sep="_"))
Parfait ответил: 12 мая 2018 в 06:02

Рассмотрите возможность создания списка фреймов данных и избегайте многих объектов, наводящих глобальную среду, поскольку этот пример может распространяться на сотни, а не только на три. Плюс с помощью этого подхода вы будете поддерживать контейнер one, способный выполнять массовые операции во всех файлах данных.

Используя sapply ниже на символьном векторе, вы создаете именованный список:

samples <- c("A","B","C")   # OR unlist(list("A","B","C"))df_list <- sapply(samples, function(x) data.frame(col1=NA,col2=NA), simplify=FALSE)# RUN ANY DATAFRAME OPERATION
head(df_list$A)
tail(df_list$B)
summary(df_list$C)# BULK OPERATIONS
stacked_df <- do.call(rbind, df_list)
stacked_df <- do.call(cbind, df_list)
merged_df <- Reduce(function(x,y) merge(x,y,by="col1"), df_list)

Или, если вам нужно переименовать список

# RENAME LIST
df_list <- setNames(df_list, paste0(samples, "_sumT"))# RUN ANY DATAFRAME OPERATION
head(df_list$A_sumT)
tail(df_list$B_sumT)
summary(df_list$C_sumT)
James Loy ответил: 22 мая 2018 в 06:25
Это будет очень полезно, спасибо за отзыв! Я попытаюсь применить это и сообщить вам, как это происходит.