Сначала соберите полный путь к интересующим файлам
library(ggplot2)
all_files <- list.files("/path/to/data/results", pattern = "sample_\\d+\\.txt$",
full.names = TRUE)
Затем создайте функцию для применения к каждому файлу
new_fun <- function(path_of_file) {
my_data <- read.table(path_of_file, header = TRUE)
ggplot(my_data, aes(x=alt_freq)) +
geom_histogram(color="black", fill="white", bins = 20) + xlim(c(0,1))
ggsave(paste0(dirname(path_of_file), "/", sub("txt$", "png",
basename(path_of_file))), plot = last_plot(),width = 16, height = 9)
}
Мы используем paste0
, чтобы создать путь для динамического сохранения графика, получив имя каталога и заменив окончание txt
на png
.
Затем используйте цикл lapply
/ map
/ for
, чтобы применить new_fun
к каждому файлу
lapply(all_files, new_fun)
Чтобы объединить все файлы в один фрейм данных, мы можем сделать
combined_data <- do.call(rbind, lapply(all_files, read.table, header = TRUE))
Если заголовок отличается для одного столбца, мы можем изменить имя столбца для этого конкретного столбца, а затем rbind
. Так, например, если информация заголовка для столбца 1 отличается, мы можем сделать
combined_data <- do.call(rbind, lapply(all_files, function(x) {
df <- read.table(x, header = TRUE)
names(df)[1] <- "new_header"
df$filename <- basename(x)
df
}))