[英]Trouble correctly returning object name in for loop
我正在嘗試使用不同的對象自動制作一系列相同的情節。 我正在使用S4類phyloseq對象。 當我使用for循環遍歷對象列表並嘗試將對象名稱用作每個圖的標題以及ggsave的文件名時,盡管它可以正確地進行識別,但我無法完全識別出正確的名稱列表中給定對象的繪圖。
我嘗試使用get()
和quote()
的deparse(substitute(object))
變體,但最終得到的結果略有不同,但仍然偏離目標。
object_list <- c(object1, object2, object3)
automate_graphs <- function(x){
for(object in x){
name <- deparse(substitute(object))
ordination <- ordinate(object, "NMDS", "bray")
plot <- plot_ordination(object, ordination) + ggtitle(label = name)
ggsave(plot, filename=sprintf("NMDS_bray_%s.pdf", name), height=4, width=7)}}
automate_graphs(object_list)
我預計要保存3個名為NMDS_bray_object1
, NMDS_bray_object2
, NMDS_bray_object3
pdf NMDS_bray_object3
。
相反,我得到NMDS_bray_S4 object of class structure("phyloseq", package = "phyloseq")
(因此它將對象的稀疏保存為變量名而不是替換名)或使用引號得到了NMDS_bray_object
,我認為這是可以預期的哈哈。 在此先感謝您的幫助!
只需使其成為對象的命名向量(列表)並遍歷名稱即可:
object_list <- c(object1 = object1,object2 = object2,object3 = object3)
automate_graphs <- function(x){
for(nm in names(x)){
object <- x[nm] #Pick out the one named nm
ordination <- ordinate(object, "NMDS", "bray")
plot <- plot_ordination(object, ordination) + ggtitle(label = nm)
ggsave(plot, filename=sprintf("NMDS_bray_%s.pdf", nm), height=4, width=7)
}}
automate_graphs(object_list)
@Joran再次感謝您的幫助-即使不是最優雅的解決方案,它也使我朝着正確的方向提出了解決方案。 我想到了生成名稱向量的想法,然后只是創建了一個額外的變量來循環遍歷該向量。 但是通過這種方式,它可以維護對象的類並創建一個單獨的對應名稱列表:
object_list <- c("object1" = object1, "object2" = object2, "object3" = object3)
automate_graphs <- function(x){
names = names(x)
obj_num = 1
for(object in x){
name <- names[obj_num]
ordination <- ordinate(object, "NMDS", "bray")
plot <- plot_ordination(object, ordination) + ggtitle(label = name)
ggsave(plot, filename=sprintf("NMDS_bray_%s.pdf", name), height=4, width=7)
obj_num = obj_num + 1
}
}
automate_graphs(object_list)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.