eval_tidy 中的错误(pair$lhs,env = default_env):找不到对象“Var1”

Posted

技术标签:

【中文标题】eval_tidy 中的错误(pair$lhs,env = default_env):找不到对象“Var1”【英文标题】:Error in eval_tidy(pair$lhs, env = default_env) : object 'Var1' not found 【发布时间】:2021-10-17 11:13:18 【问题描述】:

我在使用 case_when 在管道链内的 ggplot 中自定义标签时遇到问题。

我正在处理带有标签的数据,但我制作了这些可重现的数据来显示我的错误。这是我的代码:

#data
padmin1<- data.frame(q0005_0001 = rep(c("Insuficiente1", "Poco Suficiente2","Regular3","Suficiente4","Muy Suficiente5")),5)

#Graphic
padmin1 %>% 
  rename(Var1=q0005_0001) %>% 
  ggplot(aes(x = "", y = X5, fill = fct_rev(ordered(Var1)))) +  
  geom_bar(stat = "identity", width = 0.2) +
  geom_text(aes(label = X5), position = position_stack(vjust=0.5), colour= case_when(
    Var1 == "Insuficiente1" ~ "white",
    Var1 == "Poco Suficiente2" ~ "black",
    Var1 == "Regular3" ~ "black",
    Var1 == "Suficiente4" ~ "white",
    Var1 == "Muy Suficiente5" ~ "white",
    TRUE ~ "white"
  ) , fontface = "bold") +
  coord_flip() +
  labs(title= "La información brindada por la facultad le resultó...", caption = "Elaborado por SS, 2021") + 
  #Temas de colores
  theme(axis.title = element_blank(), 
        line = element_blank(),
        panel.background = element_rect(fill = "transparent", color = NA),
        plot.background = element_rect(fill = "transparent", color = NA),
        legend.position = "bottom", 
        panel.border = element_blank(), 
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.background = element_rect(fill = "transparent", linetype = "solid", colour = "transparent"),
        legend.box.background = element_rect(fill = "transparent", colour = "transparent"),
        axis.text = element_blank()) +
  scale_fill_manual("Leyenda", values = c("Insuficiente1"="#8A0000", "Poco Suficiente2"="#FFCD2F", "Regular3"="#DAA600", "Suficiente4"="#144D6C", "Muy Suficiente5"="#071C27")) 

运行此代码后出现以下错误:

#eval_tidy 中的错误(pair$lhs, env = default_env) : object 'Var1' not found

让我知道出了什么问题,我已经尝试在 Var1 之前将 .$ 放在 geom_text() 中,但不起作用。

【问题讨论】:

如果你想这样分配:将colour=case_when(..移动到aes()中并添加scale_color_identity。对我来说,像使用 fill 一样使用 scale_color_manual 会更自然。 嗨 stefan 谢谢你的回答,你能说得更具体一点吗?也许插入一大块代码让我渲染它?谢谢 【参考方案1】:

为了达到您想要的结果,将colour=case_when(... 移动到aes() 中并添加scale_color_identity。但是,我建议不要使用 case_when,而是使用 ifelse + grepl,因为只有两个选项,blackwhite

此外,为了获得正确的标签顺序,您必须添加group=fct_rev(ordered(Var1))。否则,标签的“堆叠”顺序与条形不同:

#data
padmin1<- data.frame(q0005_0001 = rep(c("Insuficiente1", "Poco Suficiente2","Regular3","Suficiente4","Muy Suficiente5")),5)

library(ggplot2)
library(dplyr)
library(forcats)

#Graphic
padmin1 %>% 
  rename(Var1=q0005_0001) %>% 
  ggplot(aes(x = "", y = X5, fill = fct_rev(ordered(Var1)))) +  
  geom_bar(stat = "identity", width = 0.2) +
  geom_text(aes(label = X5, 
                color = ifelse(grepl("^(P|R)", Var1), "black", "white"),
                group = fct_rev(ordered(Var1)) ), position = position_stack(vjust=0.5) , fontface = "bold") +
  scale_color_identity() +
  coord_flip() +
  labs(title= "La información brindada por la facultad le resultó...", caption = "Elaborado por SS, 2021") + 
  #Temas de colores
  theme(axis.title = element_blank(), 
        line = element_blank(),
        panel.background = element_rect(fill = "transparent", color = NA),
        plot.background = element_rect(fill = "transparent", color = NA),
        legend.position = "bottom", 
        panel.border = element_blank(), 
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.background = element_rect(fill = "transparent", linetype = "solid", colour = "transparent"),
        legend.box.background = element_rect(fill = "transparent", colour = "transparent"),
        axis.text = element_blank()) +
  scale_fill_manual("Leyenda", values = c("Insuficiente1"="#8A0000", "Poco Suficiente2"="#FFCD2F", "Regular3"="#DAA600", "Suficiente4"="#144D6C", "Muy Suficiente5"="#071C27"))

【讨论】:

感谢斯蒂芬,这是一个令人难以置信的答案。你帮助我使我的图形更加自动化。现在我正在尝试自动化条形颜色,因为在我的 r 代码中,我使用 scale_fill_manual 来检测每个类别并分配颜色红色、蓝色、黄色等。您知道根据顺序分配图例颜色的公式吗?数据框?第一个红色,第二个浅黄色,第三个深黄色,第四个蓝色,第五个深蓝色?也许与 grepl。如果你弄清楚了,请告诉我。和平相处

以上是关于eval_tidy 中的错误(pair$lhs,env = default_env):找不到对象“Var1”的主要内容,如果未能解决你的问题,请参考以下文章

Map 中的 Pair 类减少抛出错误

由于 std::pair 导致的 GCC (MoSync) 中的 C++ 构建错误

配对中的错误[关闭]

如何通过 arules R 中的 lhs itemMatrix 对象对规则进行子集化?

Apriori 中 R 中的未知项目标签

拟合具有多个 LHS 的线性模型