2017-09-18 3 views
1

Ich verwende das Leimpaket, um dynamischen Text in einem Bericht zu generieren. Wenn ich dplyr::case_when verwende, um zwischen Bedingungen zu wechseln, erhalte ich einen Fehler von Kleber.Fehler: muss Zeichen sein, nicht Leim/Zeichen bei der Verwendung von Leim() in 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") 
) 

Error: must be character, not glue/character

Die case_when Werke ohne Leim:

answer <- case_when(
    one_car$mpg < 25 ~ 0, 
    one_car$mpg >= 25 ~ 1 
) 

Und die Arbeiten Leim, wenn sie alleine laufen:

glue(row.names(one_car), " has bad mileage") 
#> Merc 280 has bad mileage 
+0

Die 'ifelse' fein arbeitet. Also, es sollte ein env Problem in 'case_when'' ifelse (one_car $ mpg <25, Kleber (row.names (one_car), "hat schlechte Laufleistung"), Kleber (row.names (one_car), "hat eine gute Laufleistung ")) # [1]" Merc 280 hat schlechte Laufleistung ". Wenn wir die Klassen überprüfen 'str (Kleber (row.names (one_car)," hat schlechte Laufleistung ")) # Klassen 'Kleber', 'Charakter' chr" Merc 280 hat schlechte Laufleistung "'. Also wickle es wahrscheinlich mit 'character' ' – akrun

Antwort

2

Der Grund innerhalb case_when die Unvereinbarkeit von glue Klasse sein könnte.

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

Eine schnelle Lösung ist es zu zwingen, zu 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" 
Verwandte Themen