Как я могу обработать несколько фреймов данных и сохранить вывод в отдельных файлах, используя R? - PullRequest
1 голос
/ 17 апреля 2019

У меня есть несколько фреймов данных в R, которые должны обрабатываться одинаково. Вывод необходимо распечатать в отдельных файлах. Это работает в принципе, но я не смог автоматически назначить имя каждого фрейма данных в качестве соответствующего имени файла.

Я пробовал разные подходы, но продвинулся дальше, объединив фреймы данных в список, например так:

# Load libraries
library(tidyverse)
library(pheatmap)

# Make data frames and combine in list
df1 <- data.frame("Aa" = sample(LETTERS, 5), "Bb" = 1:5, "Cc" = 3:7)
df2 <- data.frame("Aa" = sample(LETTERS, 10), "Dd" = 8:17, "Ee" = 12:21)
dflist <- list(df1, df2)

# Assign names back to data frames in list
names(dflist) <- c("df1", "df2")

# Create heatmap with each data frame and save as separate pdf file:
lapply(dflist, function(x){
  x_dflist_heatmap <- column_to_rownames(x, var = "Aa")
  pdf(paste0("heatmap_", x, ".pdf"))
  pheatmap(x_dflist_heatmap, scale = "row", main = paste0(x))
  dev.off()
})

Это дает два файла PDF с правильными тепловыми картами и очень полезными именами heatmap_c (2, 5, 1, 4, 3) .pdf и heatmap_c (3, 9, 6, 10, 5, 2, 7, 1 , 4, 8) .pdf.

Полагаю, проблема в том, что я говорю R перечислить фактический фрейм данных, а не его имя, но я не знаю, как это решить. Использование имен (x) интерпретируется как использование имен столбцов каждого фрейма данных. Дополнительный вопрос: это менее критично, но если бы кто-то мог сообщить мне, как я могу добавить недавно сгенерированные фреймы данных, соответствующие "x_dflist_heatmap", в мою среду данных R, это было бы действительно здорово.

Спасибо за вашу помощь !!

1 Ответ

1 голос
/ 18 апреля 2019

Спасибо вам обоим за вклад! Я думаю, что это более или менее то, что вы предложили, и это прекрасно работает:

# Load libraries
library(tidyverse)
library(pheatmap)

# Make data frames and combine in list
df1 <- data.frame("Aa" = sample(LETTERS, 5), "Bb" = 1:5, "Cc" = 3:7)
df2 <- data.frame("Aa" = sample(LETTERS, 10), "Dd" = 8:17, "Ee" = 12:21)
dflist <- list(df1, df2)

# Assign names back to data frames in list
names(dflist) <- c("df1", "df2")

# Create list of the names of the data frames in dflist
dflist_names <- names(dflist)

# Modify the list of data frames for use with pheatmap and save as a new list
dflist_heatmap <- lapply(dflist, function(x){
  x <- column_to_rownames(x, var = "Aa")
})

# Create separate pdf file for each data frame, using dflist_heatmap to generate the heatmap and dflist_names to name it
for(i in 1:length(dflist_names)){
  pdf(paste0("heatmap_", dflist_names[[i]], ".pdf"))
  pheatmap(dflist_heatmap[[i]], scale = "row", main = dflist_names[[i]])
  dev.off()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...