Pracuj mądrze, a nie ciężko. Sztuczki i skróty w R Studio
W tym artykule chciałbym podzielić się z wami niektórymi z moich ulubionych metod i skrótów na przyspieszenie pracy w R Studio. Przedstawię też narzędzia i techniki, które bywają przydatne dla zwiększenia produktywności. Jednocześnie przygotowałem kilka animacji prezentujących niektóre z nich, tak abyście mogli zobaczyć je w akcji nawet bez dostępu do R Studio.
Krzysztof Sprycha. Software Engineer w Appsilon Data Science. Absolwent Politechniki Gdańskiej, entuzjasta technologii, generalista. Przez kilka lat developer własnych aplikacji na Androida, oraz gier z wykorzystaniem Unreal Engine. Uwielbia nowe wyzwania i poznawanie różnorodnych technologii – ciekawość i poszukiwanie nowych możliwości zwykle nie pozwalają mu zamykać się zbyt długo w jednym ekosystemie. Od 2018 odkrywa możliwości jakie daje R w zakresie analizy danych, ML oraz pracy w środowisku produkcyjnym. Oprócz programowania uwielbia też zajmować się szerokim spektrum zagadnień związanych z multimediami. W wolnym czasie, gdy nie podróżuje, gra na instrumentach oraz zajmuje się m.in. miksem i produkcją muzyki.
W zależności od wykonywanej pracy będziesz regularnie używać przynajmniej kilku paneli Rstudio. Nauczenie się, jak szybko zmienić panel bez wykorzystania myszki jest kluczową umiejętnością przyspieszającą pracę. Osiąga się to przez naciśnięcie Ctrl (w tym przypadku również Control na Mac) i liczby odpowiadającej żądanemu okienku. Dodając Shift do kombinacji możesz również przełączać maksymalizację okna, które wybierasz. Jest to bardzo przydatne, jeśli potrzebujesz szerszej perspektywy. Jedynym panelem z innym skrótem dostępu jest terminal (Shift + Alt + t). Predefiniowane skróty okien: Help (3), History (4), Plots (5) lub Environment (8). Dwa, z których będziesz korzystać najczęściej to Source Editor (1) i Console (2).
Pomimo że gify mają wyświetlone zarówno skróty na PC jak i Mac, w tekście używam tych pierwszych. Jeśli jesteś użytkownikiem Maca – większość skrótów odpowiada zależności: Ctrl == ⌘ Command && Alt == ⌥ Option, jednak wystepują od tego wyjątki (Ctrl na PC w niektórych przypadkach będzie też klawiszem Control na Macu). Zawsze możecie łatwo wyświetlić listę skrótów przy pomocy ⌥ Option+Shift+K (Alt+Shift+K (PC)) jeśli potrzebujecie coś sprawdzić.
Spis treści
Szybsza praca z kodem
Pracuj mądrze, nie ciężko
Zazwyczaj pierwszą rzeczą, którą musisz zrobić po rozpoczęciu pracy, jest utworzenie kodu. Istnieją pewne funkcje, które mogą sprawić, że będzie to łatwiejsze i szybsze. Nawet podstawowe tricki mogą mieć ogromny wpływ na tempo i wygodę pracy po ich opanowaniu, zwłaszcza gdy korzystamy z kilku na raz.
Wstawianie operatorów i sekcji
Zacznijmy od skrótów, które są łatwe i bardzo przydatne!
- Alt + (-) do wstawiania operatora przypisania <-,
- Ctrl + Shift + M dla operatora magrittr (aka pipe) %>%.
Używając powyższych skrótów, spacje są wstawiane razem z operatorem.
- Ctrl + Shift + R – prosty sposób na tworzenie składanych sekcji komentarzy w kodzie,
- Alt + L – zwinięcie sekcji,
- Alt + Shift + L – rozwinięcie sekcji.
Możesz otwierać / zwijać te sekcje komentarzy (jak również inne rodzaje sekcji, np. w nawiasach klamrowych {} czy w Rmd). Aby zwinąć lub rozwinąć wszystkie sekcje w pliku, a nie tylko aktywną sekcję, zamień L z O w skrócie klawiszowym.
Małe triki do zarządzania kodem
Przesuwanie linii kodu w górę i w dół można łatwo uzyskać za pomocą kombinacji Alt + Up / Down, bez potrzeby wycinania i wklejania. W ten sposób możesz przenieść jedną aktywną linię, a nawet cała selekcję. Jeśli chcesz usunąć coś, Ctrl + D natychmiast usunie bieżącą linię / zaznaczenie.
Ekstrakcja Funkcji/Zmiennej
Jeśli napisałeś kawałek kodu, który chcesz przekształcić w funkcję, nie zaczynaj od zera. Wybierz i użyj Ctrl + Alt + X – skrót “extract into function”. Wystarczy podać nazwę funkcji, wszystkie niezbędne dane zostaną wypełnione automatycznie. Istnieje również podobny skrót do ekstrakcji zmiennej dostępny za pomocą Ctrl + Alt + V. Poniżej kilka przykładów użycia.
Selektywna zamiana tekstu
Jeśli musisz zmienić nazwę zmiennej w wielu miejscach, ale obawiasz się, że „znajdź i zamień” zepsuje twój kod, powinieneś być świadomy, że możliwa jest zmiana nazwy tylko w zakresie kontekstu pojedynczego fragmentu kodu (np. wewnątrz funkcji lub klasy). Osiąga się to poprzez wybranie funkcji lub zmiennej, którą chcemy zmienić, i naciśnięcie Ctrl + Shift + Alt + M. Zaznaczy to wszystkie wystąpienia w zakresie, pozostaje wpisać nową nazwę.
Tak, skrót jest długi, ale może być pomocny. Uważam, że jest to łatwiejsze do zapamiętania jako rozszerzenie skrótu operatora magrittr, więc Pipe + Alt.
Podpowiadanie ścieżki (aka path completion)
Na pewno znacie uzupełnienia kodu, ale w R Studio można również autouzupełnić ścieżkę pliku, podpowiedzi wywołuje się skrótem (Tab or Ctrl + Space) z pary podwójnych lub pojedynczych cudzysłowów.
Domyślnie ścieżka otwiera się w katalogu roboczym. Możesz nawigować z lokalizacji głównej, tak jak w konsoli, zaczynając od „/”, lub jak w drzewie katalogów dzięki „../”
Opcje wyszukiwania
Następne często pojawiające się pytanie to jak szybko znaleźć rzeczy, których szukasz.
Istnieje kilka dostępnych opcji wyszukiwania, których możesz użyć, aby skuteczniej znaleźć to, czego potrzebujesz.
Proste szukania
Przejdź do funkcji pliku Ctrl + (.), pozwala szybko wyszukać projekt lub funkcję w pliku i przejść bezpośrednio do niego. Obsługuje fuzzy matching, dzięki czemu łatwo jest znaleźć to, czego potrzebujesz.
Jeśli potrzebujesz większej elastyczności, użyj Ctrl + Shift + F. Skrót wywoła okno “Find in Files”, które pozwala przeszukiwać pliki w katalogu, który można określić (nawet poza projektem). Możesz przeskakiwać między elementami, które znalazłeś, klikając je dwukrotnie w oknie, które otwiera się obok konsoli.
Jeśli chcesz przeszukiwać tylko wewnątrz aktywnej karty (tab’a), możesz użyć paska wyszukiwania za pomocą Ctrl + F, co pozwala na kilka dodatkowych opcji, takich jak zamiana tekstów i wyszukiwanie tylko w wybranej części kodu.
Historia – panel i konsola
Wszystko, co przekazałeś do konsoli, nie musi być ponownie wpisywane. Dostęp do wcześniej wykonanych linii jest tak prosty, jak nawigacja za pomocą strzałek w górę i w dół, aby przechodzić między nimi w porządku chronologicznym. Jeśli chcesz uzyskać więcej wizualnych informacji zwrotnych, możesz nacisnąć Ctrl + Up, aby uzyskać listę ostatnich poleceń. Jeśli połączysz je z wpisywaniem części szukanej frazy, możesz zawęzić ją i łatwo znaleźć nawet skomplikowane polecenia, które są głęboko zanurzone w historii.
UWAGA: szukania w konsoli nie wspiera fuzzy matching – należy być dokładnym. Jeżeli chcesz wyczyścić historię użyj Ctrl+L, historia poleceń nie zostanie usunięta.
Istnieje dedykowany panel History(4), który przechowuje wykonane polecenia. Pozwala na ich wyszukiwanie i wybieranie (zakres wyboru z shift lub zaznaczenie indywidualnych poleceń z ctrl). Następnie można je łatwo przenieść do konsoli (Enter) lub pliku źródłowego (Shift + Enter).
Zarządzanie kartami (tab’ami)
Jeśli pracujesz nad więcej niż jedną kartą w edytorze źródeł, pomocne może być przełączanie między nimi za pomocą Ctrl+Tab i Ctrl+Shift+Tab. Pozwoli ci to przejść odpowiednio do następnej i poprzedniej karty, można to też zrobić za pomocą Ctrl + F11/ F12. Możliwe jest również przejście do pierwszej lub ostatniej karty przez dodanie Shift do tego skrótu. Ostatnią interesującą opcją jest nawigowanie po kartach w kolejności, w jakiej były otwierane Ctrl + F9/F10.
Przechodzenie po kartach przód/tył (normalnie i w kolejności “historycznej”)
Skakanie po kartach (przód tył, pierwsza, ostatnia)
Przechodzenie przez karty w tę i z powrotem
Karty można zamknąć za pomocą Ctrl + w, jest to znacznie lepszy wybór niż użycie tych małych przycisków „x” po prawej stronie kart.
Jeśli dojdziesz do punktu, w którym masz dużą liczbę otwartych kart, możesz:
Zamknąć wszystkie karty | Ctrl + Shift + w (+ Alt jeżeli chcesz zostawić otwartą aktywną kartę).
Jeśli wolisz je zachować, możesz przeszukiwać otwarte karty za pomocą Ctrl + Shift + . (brak wsparcia dla fuzzy matching). To wyszukiwanie można również aktywować za pomocą ikony “>>” na pasku kart.
Snippety
Używanie snippetów kodu
Czy jesteś zmęczony ciągłym pisaniem tych samych fragmentów kodu, pamiętając wszystkie nawiasy i wymagane parametry funkcji? Świetnym sposobem na uniknięcie pisania zbyt wiele, zwłaszcza powtarzalnego kodu, jest użycie snippetów.
Są one idealne do automatyzacji wstawiania kodu standardowego, ale także jeśli szukasz sposobu na przyśpieszenie pisania dużych partii kodu, gdy czas jest ograniczony (np. kodowanie na żywo podczas prezentacji).
Snippety można rozpoznać na liście autouzupełniania przez tag {snippet}.
Wpisz nazwę snippetu, naciśnij Shift + Tab, lub Tab dwukrotnie aby go użyć. Jeśli wymaga uzupełnienia – wystarczy wypełnić pozycje z elementami które są ważne przechodząc do kolejnych miejsc za pomocą Tab.
Domyślnie dostępnych jest wiele prostych snippetów w R oraz innych językach. Łatwo można je dostosować lub zdefiniować własne!
Tworzenie własnych snippetów
Aby dostosować snippety lub utworzyć właśnie użyj przycisku Edit Snippets pod sekcją Snippets w Tools -> Global Options -> Code.
Aby lepiej zrozumieć, w jaki sposób można tworzyć snippety spójrzmy na dwa przykłady z domyślnych fragmentów – macierz i funkcja.
snippet mat matrix(${1:data}, nrow = ${2:rows}, ncol = ${3:cols}) snippet fun ${1:name} <- function(${2:variables}) { ${0} }
$ jest używany jako specjalny znak oznaczający, gdzie kursor powinien przeskoczyć po uzupełnieniu poprzedniej części snippeta. W nawiasach mamy indeks pola (kolejność, w jakiej kursor przeskoczy po naciśnięciu tabulatora, 0 jest używane jako ostatnie pole, a tekst po dwukropku jest używany jako informacja o tym, co powinno być umieszczone w tym miejscu. Aby wstawić „$” do fragmentu kodu, musi on mieć postać $.
Snippety, oprócz generowania szablonów kodu, mogą również uruchamiać kod R. Umożliwia to tworzenie dynamicznych fragmentów. Używając `r expr` w dowolnym miejscu fragmentu kodu, kod R zostanie wykonany, gdy fragment zostanie rozwinięty, a wynik wstawiony do dokumentu.
Jako przykład przyjrzyj się deklaracji fragmentu znacznika czasu, która jest dostępna domyślnie.
snippet ts `r paste("#", date(), "------------------------------n")`
Uruchamia funkcję wklejania, aby wstawić komentarz z aktualną datą do kodu.
Jego wykonanie generuje się w poniższy sposób:
Wyposażeni w wiedzę spróbójmy szybko utworzyć niestandardowy snippet do wstawiania pipe’a, ale zamiast tego będziemy mieć nową linię tuż za operatorem:
snippet pipe `r paste(" %>%n")`
Edycja za pomocą wielu kursorów
W R-Studio istnieje możliwość pisania i edycji w więcej niż jednym miejscu na raz.
Istnieje kilka sposobów tworzenia wielu kursorów. Możesz nacisnąć Ctrl + Alt + (Up/Down), aby utworzyć nowy kursor w wybranym kierunku. Jeśli chcesz szybko wybrać więcej linii, użyj Alt i przeciągnij myszą, aby utworzyć prostokątny wybór lub Alt + Shift i kliknij, aby utworzyć prostokątny wybór od bieżącej pozycji kursora do klikniętej pozycji.
Ten sposób edycji może wydawać się onieśmielający i niełatwy w obsłudze przy pierwszej próbie, ale wiedząc o tym, możesz zaoszczędzić czas, gdy napotkasz powtarzające się zadania wieloliniowe. Spróbuj bawić się tą funkcjonalnością przez jakiś czas aby nabrać wprawy.
Poniżej znajduje się przykład, jak może wyglądać scenariusz przypadku użycia.
Inną metodą tej techniki jest użycie paska narzędzi Znajdź / Zamień z poprzedniego akapitu, aby umieścić wiele kursorów. Wystarczy wyszukać frazę i nacisnąć przycisk All, aby wybrać wszystkie pasujące elementy. Spowoduje to utworzenie kursora dla każdej pasującej frazy. Jeśli nie chcesz przeszukiwać całego pliku, możesz również ograniczyć obszar dla szukanej frazy, wybierając interesującą Cię część i zaznaczając pole przy pomocy opcji “In selection” w pasku wyszukiwania.
Słowo na koniec
Znasz to wszystko? To super! Poznaj więcej skrótów na naszym blogu o data science. Jeżeli jesteś zainteresowany pracą w języku R zaaplikuj do Appsilon Data Science! Rozważ podzielenie się tym z kimś, kto dopiero zaczyna swoją przygodę w R!