目前还不清楚您为什么要在这里使用sym
.如果您将该部分go 掉,则可以使用以下两个选项之一
ggplot(diamonds, aes(x = cut, y = ifelse(TRUE, clarity, price))) +
geom_col(position = "dodge")
# or
ggplot(diamonds, aes(x = cut, y = if(TRUE) clarity else price)) +
geom_col(position = "dodge")
问题是sym("clarity")
并不完全等同于clarity
.前者需要经过判断才能成为后者.因为aes()
使用了非标准的判断.您不能直接调用类似于
ggplot(diamonds, aes(x = cut, y = sym("clarity"))) +
geom_col(position = "dodge")
相反,您需要将值注入到!!
的调用中
ggplot(diamonds, aes(x = cut, y = !!sym("clarity"))) +
geom_col(position = "dodge")
因此,我想如果您真的想使用sym
,您只需将该值注入到表达式中
ggplot(diamonds, aes(x = cut, y = !!ifelse(TRUE, sym("clarity"), sym("price")))) +
geom_col(position = "dodge")
请注意,这不适用于dplyr
的更谨慎的dplyr::if_else
,因为通常你不做一个符号向量.由于您不使用向量或值,而只是使用符号名称,因此最好使用if
而不是ifelse
,因为这更多地是关于控制流而不是转换向量.
ggplot(diamonds, aes(x = cut, y = !!(if(TRUE) sym("clarity") else sym("price")))) +
geom_col(position = "dodge")