函数中的fct_reorder问题

k5ifujac  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(117)

我试图创建一个函数,为不同的数据列生成箱线图。我想按照y变量的升序对因子进行重新排序。它在我不使用函数时有效,即,

data(mpg)

ggplot(data = mpg) +
geom_boxplot(aes(fct_reorder(class, hwy), y = hwy))

结果如下:

但是,如果我尝试使用map()函数创建一个函数来检查不同的变量,我会得到一个错误:

bp <- function(param){
parameter <- mpg[,param]
ggplot(data = mpg) +
geom_boxplot(aes(fct_reorder(class, parameter)))
}

target_parameters <- c("hwy", "cty")

grid.arrange(grobs = map(target_parameters, bp))

Error in fct_reorder(as.factor(class), parameter) : 
  length(f) == length(.x) is not TRUE

有人知道我哪里做错了吗?
太感谢你了!

7fhtutme

7fhtutme1#

你的功能有几个问题。首先,你使用了一个名为parameter的参数,它应该是param。其次,您还没有将变量Map到y轴(仅Map到x轴)。第三,字符串没有被转换为fct_reorder中的列名
如果您希望将变量作为字符串而不是空符号传递,则可以使用.data[[param]]

bp <- function(param){
  ggplot(data = mpg) +
    geom_boxplot(aes(fct_reorder(class, .data[[param]]), .data[[param]]))
}

bp("hwy")

这也适用于map示例:

target_parameters <- c("hwy", "cty")

gridExtra::grid.arrange(grobs = map(target_parameters, bp))

相关问题