2017-08-31 1 views
2

Est-ce que as_factorforcats peut renvoyer un facteur ordonné? Il semble être une fonctionnalité manquante si ce n'est pas, bien que je ne l'ai pas vu signalé comme un problème sur le GitHub page.Can forcats :: as_factor retourne un facteur ordonné?

J'ai essayé:

y <- forcats::as_factor(c("a", "z", "g"), ordered = TRUE) 
is.ordered(y) 
# FALSE 

Si ce faisant, je ne peux pas est alors il un danger potentiel:

y <- ordered(forcats::as_factor(c("a", "z", "g"))) 

Ou serait-il préférable de le faire:

y <- factor(c("a", "z", "g"), levels = unique(c("a", "z", "g")), ordered = TRUE)) 
+1

Alors que 'Forcats ::: as_factor.character' appelle' fct_inorder', qui prend en charge un '' ordonnée = argument, il semble que 'hardcoded fct_inorder (x)' de sorte que peu importe ce que vous passez dedans, il ne va pas être commandé. Il pourrait s'agir d'un bug car 'fct_inorder (x, ...)' semble permettre à l'extra 'ordered =' – thelatemail

Répondre

1

Il semble que c'est un comportement inattendu. forcats::as_factor le force à être ordonné comme ils apparaissent, mais de toute façon ne définit pas le drapeau. Mais en le combinant avec base::factor, il n'est pas nécessaire de spécifier explicitement la commande, juste le réglage du drapeau semble fonctionner correctement.

y <- forcats::as_factor(c("a", "z", "g")) 
y 
[1] a z g 
Levels: a z g 

is.ordered(y) 
[1] FALSE 

k <- factor(y, c("a","z","g"), ordered = TRUE) 
k 
[1] a z g 
Levels: a < z < g 

is.ordered(k) 
[1] TRUE 

k2 <- factor(y, ordered = TRUE) 
k2 
[1] a z g 
Levels: a < z < g 

is.ordered(k2) 
[1] TRUE 

k3 <- factor(forcats::as_factor(c("a","g","z")), ordered = TRUE) 
k3 
[1] a g z 
Levels: a < g < z 

is.ordered(k3) 
[1] TRUE