簡體   English   中英

無法正確返回for循環中的對象名稱

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

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