我正在使用胶水包在报告中生成动态文本。当我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)
究其原因可能是不相容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)