如何在ggplot2中的aes中使用ifelse?

问题描述 投票:0回答:1

我在 R 中创建了一个生成图形的函数,并且有一个名为

m_col
的参数,当我的图形有多于一列时使用该参数。

我尝试了这段代码:

generateGraph <- function(data, m_col = FALSE) {
  
  if(m_col == TRUE) {
    col <- names(data)[2]
  } else {
    col <- names(data)[1]
  }
  
  data |>
    select(everything(), var = {{col}}) |>
    ggplot(aes(x = ifelse(m_col == TRUE, reorder(var, -n), var),
               y = n,
               ymin = n_low,
               ymax = n_upp)) +
    geom_bar(stat = "identity",
             fill = "#273499",
             alpha = .8,
             width = .7)
  
}

generateGraph(question, m_col = TRUE)

结果是这样的:

但应该是这样的:

我做错了什么?

我的

dput

structure(list(resposta = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 
2L), levels = c("Não", "Sim"), class = "factor"), questao = c("Baixo número de candidatos(as) com a experiência necessária", 
"Não há interesse nesse tipo de trabalho", "Falta de qualificação para as vagas", 
"Muita competição de outras empresas pelos candidatos", "Distância e problemas de transporte", 
"Salários baixos", "Outros"), n = c(0.249678269126242, 0.0882252727404921, 
0.214696071646437, 0.0358608969946233, 0.0670295733380799, 0.0324488467977079, 
0.0262572373795945), n_low = c(0.201005459494235, 0.0573694113878506, 
0.168048082746628, 0.0143586248395167, 0.0409590734276312, 0.0142092731208629, 
0.00961143386157624), n_upp = c(0.298351078758249, 0.119081134093134, 
0.261344060546245, 0.0573631691497299, 0.0931000732485286, 0.0506884204745529, 
0.0429030408976127)), row.names = c(NA, -7L), class = c("tbl_df", 
"tbl", "data.frame"))
r if-statement ggplot2
1个回答
0
投票

使用

if
而不是
ifelse
例如

ggplot(aes(x = if(m_col == TRUE) reorder(var, -n) else var,
           y = n,
           ymin = n_low,
           ymax = n_upp)) +

ifelse
返回等于条件长度的向量。所以
ifelse(TRUE, 1:5, 10)
只返回 1,因为
length(TRUE)==1
。您不应该使用
ifelse
来控制流,它实际上仅用于转换向量。

© www.soinside.com 2019 - 2024. All rights reserved.