如何修复R中的“ .l元素2必须具有长度1或13,而不是8”错误?

时间:2019-06-26 20:18:40

标签: r ggplot2 purrr

我正在编写一个自定义函数,该函数使我可以进行几个单独的箱形图。 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)

1 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为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列表时不会改变。 / p>