Я имею в виду несколько выводов, которые я получаю из QIIME, тексты, которыми я хочу манипулировать для получения коробочных графиков. Каждый ввод форматируется одинаковым образом, поэтому манипулирование всегда одинаково, но оно меняет имя источника. Для каждого ввода я хочу извлечь последние 5 строк, иметь среднее значение для каждого столбца / выборки, связать значения для выборки экспериментальных меток (группы), взятых из файла карты, и расположить их в порядке, который я использую для создания коробочной диаграммы всех 6 полученных данных.
В bash я делаю что-то вроде "for i in GG97 GG100 SILVA97 SILVA100 NCBI RDP; do cp ${i}/alpha/collated_alpha/chao1.txt alpha_tot/${i}_chao1.txt; done
", чтобы выполнить команду, несколько раз меняющую имена в коде автоматически c через ${i}
.
Я изо всех сил пытаюсь найти способ сделать то же самое с R. Я думал создать вектор, содержащий имена, а затем использовать цикл for
, перемещая i
с помощью [1], [2]
et c ., но он не работает, он останавливается на строке read.delim, не находя файл в wd.
Вот код манипуляции, который я написал. После комментария он будет повторяться 6 раз с 6 базами данных, которые я использую (GG97 GG100 SILVA97 SILVA100 NCBI RDP).
ПЛЮС, я повторяю этот процесс 4 раза, потому что у меня есть 4 метрики для использования (здесь я показываю Шеннона, но у меня также есть копия кода для chao1, seen_species и PD_whole_tree).
library(tidyverse)
library(labelled)
mapfile <- read.delim(file="mapfile_HC+BV.txt", check.names=FALSE);
mapfile <- mapfile[,c(1,4)]
colnames(mapfile) <- c("SampleID","Pathology_group")
#GG97
collated <- read.delim(file="alpha_diversity/GG97_shannon.txt", check.names=FALSE);
collated <- tail(collated,5); collated <- collated[,-c(1:3)]
collated_reorder <- collated[,match(mapfile[,1], colnames(collated))]
labels <- t(mapfile)
colnames(collated_reorder) <- labels[2,]
mean <- colMeans(collated_reorder, na.rm = FALSE, dims = 1)
mean = as.matrix(mean); mean <- t(mean)
GG97_shannon <- as.data.frame(rbind(labels[2,],mean))
GG97_shannon <- t(GG97_shannon);
DB_type <- list(DB = "GG97"); DB_type <- rep(DB_type, 41)
GG97_shannon <- as.data.frame(cbind(DB_type,GG97_shannon))
colnames(GG97_shannon) <- c("DB","Group","value")
rm(collated,collated_reorder,DB_type,labels,mean)
Здесь я вставляю все выходные вместе, замораживаю порядок и делаю блокпост.
alpha_shannon <- as.data.frame(rbind(GG97_shannon,GG100_shannon,SILVA97_shannon,SILVA100_shannon,NCBI_shannon,RDP_shannon))
rownames(alpha_shannon) <- NULL
rm(GG97_shannon,GG100_shannon,SILVA97_shannon,SILVA100_shannon,NCBI_shannon,RDP_shannon)
alpha_shannon$Group = factor(alpha_shannon$Group, unique(alpha_shannon$Group))
alpha_shannon$DB = factor(alpha_shannon$DB, unique(alpha_shannon$DB))
library(ggplot2)
ggplot(data = alpha_shannon) +
aes(x = DB, y = value, colour = Group) +
geom_boxplot()+
labs(title = 'Shannon',
x = 'Database',
y = 'Diversity') +
theme(legend.position = 'bottom')+
theme_grey(base_size = 16)
Как мне сохранить этот код "DRY" и мне не нужно 146 строк кода повторять одно и то же снова и снова? Спасибо !!