【问题标题】:Pair values individually using techniques like lapply使用 lapply 等技术单独配对值
【发布时间】:2021-02-17 11:57:42
【问题描述】:

使用lapply 系列非常方便,我可以同时计算多个组合。但是,我发现自己仍然使用我想单独分配的那些值进行大量复制粘贴,而不是计算所有组合。下面是一个例子,如果我在这个例子中使用lapply,我会得到1,2,3,40.2,0.7,1.2,1.7的所有组合。有什么方法可以简单地单独配对1-0.2;2-0.7;3-1.3;4-1.7 并使用类似的技术,如lapply

title <- function (k){
  list(
  k [[1]] + ggtitle ('A = 0.2'),
  k [[2]] + ggtitle ('A = 0.7'),
  k [[3]] + ggtitle ('A = 1.2'),
  k [[4]] + ggtitle ('A = 1.7'))
}

【问题讨论】:

    标签: r list ggplot2


    【解决方案1】:

    您可以将值放入与绘图列表长度相同的标题向量tt 中,并在sequence 上使用lapply

    tt <- c(0.2, 0.7, 1.2, 1.7)
    
    res <- lapply(seq(k), function(i) {
      k[[i]] + ggtitle(paste0("A = ", tt[i]))
    })
    

    结果

    前两个结果。

    res[[1]]
    

    res[[2]]
    


    数据:

    library(ggplot2)
    p <- ggplot(iris, aes(Petal.Length, Petal.Width)) + geom_point()
    k <- list(p, p, p, p)
    

    【讨论】:

      【解决方案2】:

      Jay.sf 的回答也不错,但我认为可能值得指出的是,mapply() 函数是专门为处理这些并行向量情况而设计的。在下面的示例中,我们在 apply 中使用自定义匿名函数将标题附加到绘图列表。

      library(ggplot2)
      
      # Create list of plots
      p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
      p <- rep(list(p), 4)
      
      # Vector of titles
      titles <- paste0("A = ", c(0.2, 0.7, 1.2, 1.7))
      
      # Using the mapply function
      out <- mapply(
        function(plot, title) { # <- function that does the work
          plot + ggtitle(title)
        }, 
        plot = p, title = titles, # <- arguments to function as vectors/lists
        SIMPLIFY = FALSE # <- we want list output
      )
      
      # Show plots
      patchwork::wrap_plots(out)
      

      reprex package (v1.0.0) 于 2021-02-17 创建

      【讨论】:

      • 感谢您介绍如何在这种情况下使用mapply!真的很有帮助!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2012-12-08
      • 1970-01-01
      • 2023-04-09
      • 2019-09-27
      • 2020-05-23
      • 2018-01-09
      相关资源
      最近更新 更多