Я создал цикл для итеративной генерации некоторых круговых диаграмм в R ... это основная идея кода: я читаю каждый объект (список) в .env
, который соответствует моему шаблону (cond_genes_
)), для каждого names()
этого объекта я создаю новый data.frame со своими значениями, а для каждой строки этого нового data.frame я ищу в другом согласованном объекте (также из .env
), добавляя новый столбец с присутствиемили отсутствие (1/0).Наконец, столбцы суммируются на круговой диаграмме.
Моя проблема в том, что цвета не одинаковы для каждого сектора круговой диаграммы, несмотря на то, что я создал объект ab с этим цветовым условием соответствия.
isec_names <- sort(unique(unlist(sapply(ls(pattern = "isec"), function(x) (names(eval(parse(text = x))))))))
i_col <- RColorBrewer::brewer.pal(n = length(isec_names), name = 'Set3')
head(i_col)
# BM PCs BM PCs (clon 2) BM PCs&CTCs
# "#8DD3C7" "#FFFFB3" "#BEBADA"
# BM PCs&CTCs&BM PCs (clon 2) BM PCs&CTCs&Plasm. BM PCs&CTCs&Plasm.&BM PCs (clon 2)
# "#FB8072" "#80B1D3" "#FDB462"
# BM PCs&Plasm. CTCs CTCs&Plasm.
# "#B3DE69" "#FCCDE5" "#D9D9D9"
# Plasm.
# "#BC80BD"
Это код:
for(k in ls(pattern = "cond_genes_")){
y <- eval(parse(text = k))
for(j in names(y)){
u2 <- data.frame(gene = y[[j]])
# search its match-dataframe in .Env
y2 <- eval(parse(text = grep(gsub("cond_genes_", "", k), ls(pattern = "isec"), value = T)))
for(i in 1:length(y2)){
aux <- as.vector(unlist(y2[i]))
u2[,ncol(u2)+1] <- sapply(u2$gene, function(x) ifelse(x %in% aux, 1, 0))
}
cs <- colSums(u2[,2:ncol(u2)])
png("pieChart_a.png"))
labels <- paste0(names(cs), "\n", cs," (", round(prop.table(cs)*100, digits = 1), "%)")
pie2(cs, main = paste0(gsub("cond_genes_", "", k), ": ", j), labels = labels,
border = "gray56", col = i_col)
dev.off()
}
}
А это те графики, которые окрашиваются по-разному (например, сектор "Плазма"), я не знаю причину.

Есть идеи, что я делаю не так, пожалуйста?