错误:在 case_when 中使用glue() 时必须是字符,而不是胶水/字符

Sam*_*rke 2 r dplyr

我正在使用胶水包在报告中生成动态文本。当我dplyr::case_when用来在条件之间切换时,我收到了胶水错误。

library(dplyr); library(glue)
one_car <- mtcars[10, ]

# Throws error:
answer <- case_when(
  one_car$mpg < 25 ~ glue(row.names(one_car), " has bad mileage"),
  one_car$mpg >= 25 ~ glue(row.names(one_car), " has good mileage")  
)
Run Code Online (Sandbox Code Playgroud)

错误:必须是字符,而不是胶水/字符

case_when无胶工作原理:

answer <- case_when(
  one_car$mpg < 25 ~ 0,
  one_car$mpg >= 25 ~ 1  
)
Run Code Online (Sandbox Code Playgroud)

胶水单独运行时起作用:

glue(row.names(one_car), " has bad mileage")
#> Merc 280 has bad mileage
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

究其原因可能是不相容glue类中case_when

str(glue(row.names(one_car), " has bad mileage"))
#Classes 'glue', 'character'  chr "Merc 280 has bad mileage"
Run Code Online (Sandbox Code Playgroud)

一个快速的解决方法是强制它 character

case_when(
   one_car$mpg < 25 ~ as.character(glue(row.names(one_car), " has bad mileage")),
   one_car$mpg >= 25 ~ as.character(glue(row.names(one_car), " has good mileage"))  
  )
#[1] "Merc 280 has bad mileage"
Run Code Online (Sandbox Code Playgroud)