[英]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.