dplyr 'renommer' fonction d'évaluation standard ne fonctionne pas comme prévu?

Mise à JOUR: De commentaire ci-dessous sur ce post, cela fonctionne maintenant comme prévu, sans les questions que j'ai posé ici.

Ci-dessous est un jouet exemple d'utilisation de rename_ de dplyr. Je m'attendais à être en mesure de changer le nom de la colonne à son nom d'origine en utilisant le deuxième exemple ci-dessous, mais je devine que l'argument de fonction de règles d'évaluation sont en quelque sorte à l'empêcher de travailler de la manière que je pense. Il est facile de solution de contournement à l'aide de l'original package plyr rename fonction (ainsi que d'utiliser le package de base names fonction), mais j'ai le sentiment que je vais manquer un dplyr solution à cette question.

J'ai une solution de contournement, comme indiqué ci-dessous, mais je vous accueillir à la fois un dplyr solution pour le deuxième exemple de travail que je pense, ou une explication de pourquoi je ne devrais pas attendre ça fonctionne comme je veux.

Merci,
Matt

EDIT: j'ai ajouté un exemple ci-dessous à l'aide de rename_ pour faire ce travail, mais il est compliqué. Je suppose que si le bug qui Hadley se réfère ci-dessous est fixée, ce sera le travail comme il le montre ci-dessous. Mais jusqu'alors, ma façon maladroite, mais il est probablement mieux d'utiliser la norme plyr méthode. Également ajouté de la base de R technique à la fin par exemple l'exhaustivité.

library(plyr)
library(dplyr)

# dataframe to operate on
dat <- data_frame(a=1, b=1)

# identifier with string of column name in dat
x <- "a"


# Renaming using standard evaluation this way works
dat %>%
    rename_("new" = x)
# Source: local data frame [1 x 2]
# 
#   new b
# 1   1 1


# But changing it back does not
# I expect "a" to be the name, not the identifier x
dat %>%
    rename_("new" = x) %>%
    rename_(x = "new")
# Source: local data frame [1 x 2]
# 
#   x b
# 1 1 1


# This works, but seems really awkward...
dat %>%
    rename_("newname" = x) %>%
    do(do.call(rename_, setNames(list(., "newname"), c(".data", x))))

# Source: local data frame [1 x 2]
# 
#   a b
# 1 1 1


# This works fine
dat %>%
    rename_("new" = x) %>%
    plyr::rename(c("new" = x))
# Source: local data frame [1 x 2]
# 
#   a b
# 1 1 1


# Base R way
datrn <- dat %>%
    rename_("newname" = x)
names(datrn)[names(datrn) == "newname"] = x
datrn
# Source: local data frame [1 x 2]
# 
#   a b
# 1 1 1

source d'informationauteur mpettis