簡體   English   中英

使用 for 循環 R 創建多個 ggplots 的問題

[英]Isssue with creating multiple ggplots using for loop R

我正在嘗試創建 6 個 ggplot 對象,繪制相同的圖形但標記不同,標簽存儲在 object{1:6}

ggrun<- c(1,2,3,4,5,6) 
for(i in ggrun) {assign(paste0("ggplot_", i), 
(ggplot(DF1, aes(x=X, y=Y, color=as.factor(get(paste0("object", i))[["cluster"]]))) + geom_point(fill = NA, size=1, alpha=0.6)))}

但這產生了 6 個相同的對象,具有正確的 {1:6} 名稱,但都具有相同的object6值。

我也檢查了我的 for 循環,

for(i in ggrun) {print(table(get(paste0("hdbscan_object", ggrun[i]))[["cluster"]]))}

它吐出了6張不同的桌子。

此外,要確保它不是我的繪圖命令:

grid.arrange(grobs = g, ncol(3), nrow(2), top="Title of Graphs")

我手動分配了列表 object 中的每個項目,例如:

g[[5]] = ggplot(DF1, aes(x=PC1, y=PC4, color=as.factor(get(paste0("object", "5"))[["cluster"]])))  
+ geom_point(fill = NA, size=1, alpha=0.6)

它運行正確。

ggplot 與 for 循環的工作有點奇怪,因為許多內部操作似乎依賴於指針而不是實際存儲值。 要解決此問題,您通常必須為它們創建一個新環境,以防止指針指向的值被更改。

您可以嘗試將值存儲在列表中並使用lapply function:

g <- lapply(1:6, 
            function (x){
                ggplot(DF1, aes(x=PC1, y=PC4, 
                       color=as.factor(get(paste0("object", x))[["cluster"]]))) + 
                    geom_point(fill = NA, size=1, alpha=0.6)
            }
     )

這是使用mget的另一種方法:

library(ggplot2)

lapply(mget(paste0("object", 1:6)), function(x) {
  ggplot(DF1, aes(x=PC1, y=PC4, 
                  color= factor(x[["cluster"]]))) + 
    geom_point(fill = NA, size=1, alpha=0.6)
}) -> list_plots

list_plots

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM