我在 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"))
使用
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
来控制流,它实际上仅用于转换向量。