代码之家  ›  专栏  ›  技术社区  ›  shakesmilk

R中的For循环不使用绘图功能

  •  0
  • shakesmilk  · 技术社区  · 2 年前

    我正在尝试一种方法,找出如何使用for循环一次打印多个绘图,因为我对R非常陌生,似乎找不到这样做的方法

    我有40个主要组件,我想通过循环来绘制,但我只能通过每次调用函数来单独完成;for循环什么都不做

    以下是显示或绘制主要部件的功能

    showPrincipalComponents <- function(PCNumber) {
    tidied_pca %>%
    filter(PC == PCNumber) %>%
    top_n(11, abs(Contribution)) %>%
    mutate(Tag = reorder(Tag, Contribution)) %>%
    ggplot(aes(Tag, Contribution, fill = Tag)) +
    geom_col(show.legend = FALSE, alpha = 0.8) +
    theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5), 
          axis.ticks.x = element_blank()) + 
    labs(x = "Personal attributes",
         y = "Principal Component Importance")
    

    }

    这项工作:

    showPrincipalComponents(comp[1]) 
    showPrincipalComponents(comp[2]) 
    showPrincipalComponents(comp[3]) 
    showPrincipalComponents(comp[4]) 
    

    这不会(执行时不返回任何内容):

    x=1:40
    for (i in x){showPrincipalComponents(comp[i])}
    

    任何帮助都将不胜感激

    1 回复  |  直到 2 年前
        1
  •  1
  •   TimTeaFan    2 年前

    你必须做两件事才能在 for

    (1) 正如@neilfws已经在评论中指出的那样 对于 需要对回路进行分类(例如。 out[[i]] <- ).

    (2) 自 ggplot 使用惰性评估仅执行(1)将生成四十次相同的绘图(始终是最后一个绘图, i = 40 ). 如果你想坚持 对于 循环而不是 lapply 您可以将函数调用包装为 eval(bquote()) 和评估 .(i) .

    x <- 1:40
    out <- vector("list", length = length(x))
    
    for (i in x) {
      out[[i]] <- eval(bquote(
        showPrincipalComponents(comp[.(i)])
      ))
    }
    out