web-dev-qa-db-fra.com

Renommer des objets dans le contexte RStudio sensible dans l'ensemble du projet

J'ai un problème lors du développement d'un projet R à l'aide de RStudio. Je crée un objet, puis je réalise plus tard que je veux lui donner un autre nom. Je dois ensuite changer manuellement le nom, ce qui est ennuyeux dans les grands projets et entraîne souvent des erreurs, car je supervise facilement une ligne. La fonction replaceall de RStudio ne correspond pas tout à fait au nom que j'essaie de remplacer, car elle ne le fait que dans un fichier, elle ne prend pas en compte uniquement les références de la variable voir l'exemple de code:

f <- function(a){
    b <- a
return(a+b)
}
a <- 5;
a <-  a + f(1)

Dans cet exemple, je voudrais renommer aseulement à l'intérieur de la fonction. Je devrais le faire trois fois, tandis que replaceall gâcherait mon code extérieur la fonction. Je ne veux pas modifier cela a. C'est à dire. Visual Studio a la possibilité de renommer une variable à l'aide du raccourci clavier: Ctrl + .. Ensuite, Visual Studio renomme la variable et ses références dans tout le projet, sans éditant des variables de même nom qui n'ont pas de référence à celle éditée. Je n'ai pas pu trouver une telle option dans RStudio. Y a-t-il un équivalent?

26
David Go

RStudio IDE v1. inclut une fonctionnalité appelée "Renommer dans la portée" qui vise à ce faire:

Cette fonctionnalité permet de renommer facilement toutes les instances d'une variable. L'outil est sensible au contexte; modification de m en m1 ne changera pas mtcars en m1tcars.

RStudio Rename in Scope animated GIF

Je ne trouve pas de documentation pour la fonctionnalité. L'exemple du GIF animé fonctionne cependant quand je place le curseur sur la première instance de d (le nom de la variable à remplacer), puis sélectionne Code -> Rename in Scope. Cependant, lorsque j'essaie les mêmes étapes mais à partir de la deuxième instance, cela ne fonctionne pas. Donc, apparemment, vous devez partir de l'endroit où la variable est affectée?

## Example from animated GIF
library(dplyr)
library(magrittr)
library(ggplot2)

d <- mtcars %>%                      ## Instance 1
  filter(cyl > 4) %>%
  select(hp, mpg)

ggplot(data = d, aes(x=hp, y=mpg)) + ## Instance 2
  geom_point() +
  geom_smooth()

En pratique, il semble toujours y avoir des bogues qui empêchent la fonctionnalité de fonctionner. Par exemple, l'exemple ci-dessous ne fonctionne que si l'en-tête est supprimé.

## Header ####
example <- 1:10
example[1]
40
dnlbrky