【问题标题】:How to fix "Element 2 of `.l` must have length 1 or 13, not 8" error in R?如何修复 R 中的“`.l` 的元素 2 的长度必须为 1 或 13,而不是 8”错误?
【发布时间】:2019-06-26 20:18:40
【问题描述】:

我正在编写一个自定义函数,它可以让我制作几个单独的箱线图。 x 轴应始终为月,但 y 轴应采用多个值,并且代码应为每种情况绘制单独的箱线图。当我尝试运行下面编写的代码时,出现以下错误:“错误:.l 的元素 2 的长度必须为 1 或 13,而不是 8”。你能解释一下为什么会发生这个错误以及如何解决它吗?

提前谢谢你!

forestfires <-read.csv(url(
     "https://archive.ics.uci.edu/ml/machine-learning-  databases/forest-fires/forestfires.csv"))

boxplot_months <- function(a,b, mydataset) {
  ggplot(data = mydataset) +
    aes_string(x=a, y=b) +
    geom_boxplot() +
    theme(panel.background = element_rect(fill="white")) +
    labs(x=a, y=b)
}

indices_vect <- c("FFMC", "DMC", "DC","ISI","temp","RH", "wind",     "rain")
args_list <- list(a="month",b=indices_vect, mydataset=forestfires)

pmap(args_list, boxplot_months)

【问题讨论】:

    标签: r ggplot2 purrr


    【解决方案1】:

    发生这种情况是因为pmap 期望您的输入列表 (.l) 每个都具有相同的长度。在您的情况下,a 的长度为 1,是一个字符串。 forestfires 的长度为 13(df 的长度是列数)。

    由于任何长度为 1 的元素都可以通过重复向量化为更长的长度,因此它期望您的另一个列表元素 b 的长度为 1,在这种情况下,a 和 b 都被复制 13 次,或者长度为 13 , 在这种情况下只复制 a。

    在您的情况下,您实际上根本不需要pmap,只需要map,因为每次更改的唯一输入是b。如果您将最后一行更改为:

    map(.x = indices_vect, .f = boxplot_months, a = "month", mydataset = forestfires)
    

    一切正常,你得到了你的 8 个地块。这利用了map 中的... 参数,您可以在其中指定.f 函数的其他参数,这些参数在您浏览.x 列表时不会改变。

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 2020-10-27
      • 1970-01-01
      相关资源
      最近更新 更多