2010-06-19 7 views
8

Nie mogę znaleźć czegoś na skutek polecenia cofania w R (ani we Wprowadzeniu do R, ani w R w skrócie). Szczególnie interesuje mnie cofanie/usuwanie w przypadku interaktywnych wykresów.Polecenie Cofnij w R

Jakie metody proponujesz?

Odpowiedz

24

Należy rozważyć inne podejście, które prowadzi do powtarzalny pracy:

  • Odbiór edytor lubisz i który ma R wsparcia
  • Wpisz swój kod w „fragmenty”, czyli krótkie pliki dla funkcji , a następnie skorzystaj z funkcji edytora/R integracji, aby wysłać kod do tłumacza
  • Jeśli popełnisz błąd, ponownie edytuj swój opis i uruchom go ponownie
  • Będziesz zawsze mieć dziennik, co zrobiłeś

Wszystko to działa ogromnie dobrze w ESS dlatego wielu doświadczonych użytkowników jak R tym środowisku. Ale redaktorzy są subiektywnym i osobistym wyborem; inni ludzie jak Eclipse z StatET lepiej. Istnieją również inne rozwiązania dla systemów Mac OS X i Windows, a wszystko to zostało omówione niezliczoną ilość razy wcześniej w SO i innych miejscach, takich jak listy R.

+1

Chciałbym tylko zaoferować za to dwa centy. Moim preferowanym edytorem jest Eclipse + StatEt, ale jak mówi Dirk, wybór edytora jest subiektywny ... – PaulHurleyuk

+0

Lubię używać Gedit + RGedit. (Niestety nie udało się zainstalować niestety Statetu w Fedorze). Teraz mamy 4 centy;) – nico

+1

Jeśli jesteś użytkownikiem systemu Windows, zawsze możesz wypróbować Tinn-R. Nie używam go sam, ale słyszałem o nim wiele rzeczy. Teraz mamy 6c. :) –

13

Generalnie przyjmuję strategię Dirka. Powinieneś dążyć do tego, aby twój kod był całkowicie powtarzalną zapisem transformacji surowych danych do postaci wyjściowej.

Jednakże, jeśli masz złożony kod, ponowne uruchomienie może zająć dużo czasu. Mam kod, który zajmuje ponad 30 minut, aby przetworzyć dane (tj. Import, transformacja, scalanie itp.). W takich przypadkach pojedyncza linia kodu powodująca niszczenie danych wymagałaby ode mnie 30 minut na przywrócenie obszaru roboczego. dane kodu niszczących mam na myśli takie rzeczy jak:

  • x <- merge(x, y)
  • df$x <- df$x^2

np scala, zastępując istniejącą zmienną o transformacji, usuwając wiersze lub kolumny i tak dalej. W takich przypadkach jest to łatwe, zwłaszcza gdy po raz pierwszy uczysz się R, aby popełnić błąd.

Aby uniknąć konieczności oczekiwania to 30 minut, ja przyjąć kilka strategii:

  • Jeśli mam zamiar zrobić coś, gdzie istnieje ryzyko zniszczenia moje aktywne obiekty, ja najpierw skopiować wynik do obiekt tymczasowy. Następnie sprawdzę, czy zadziałało z obiektem tymczasowym, a następnie ponownie uruchomiłem go, zastępując właściwy obiekt. przykład pierwszy bieg temp <- merge(x, y); sprawdzić, czy to zadziałało str(temp); head(temp); tail(temp) i jeśli wszystko wygląda dobrze x <- merge(x, y)
  • Jak to zwykle w badaniach psychologicznych, często mają duże ramki danych z setkami zmiennych i różnych podgrupach przypadków. Dla danej analizy (np. Tabela, rysunek, tekst niektórych wyników), często wyodrębniam tylko podzbiór przypadków i zmiennych, których potrzebuję, do oddzielnego obiektu do analizy i pracy z tym obiektem podczas przygotowywania i sfinalizowania kod analizy. W ten sposób rzadziej przypadkowo uszkodzę główną ramkę danych.Zakłada się, że wyniki analizy nie muszą być przekazywane z powrotem do głównej ramki danych.
  • Po zakończeniu wykonywania wielu skomplikowanych transformacji danych mogę zapisać kopię podstawowych obiektów obszaru roboczego. Np., save(x, y, z , file = 'backup.Rdata') W ten sposób, jeśli popełnię błąd, wystarczy przeładować te obiekty.
  • df$x <- NULL jest wygodnym sposobem na usunięcie zmiennej w ramce danych, które nie chcą tworzyć

Jednak w końcu nadal uruchomić cały kod od zera, aby sprawdzić, czy wynik jest powtarzalny.

+0

Dobra odpowiedź. Zauważ jednak, że wiele z nich jest obsługiwanych automatycznie za pomocą CacheSweave (lub 'knitr'). –

+2

Uzgodnione. Dwa lata później używam buforowania w dzianiu. –

+0

Tak, myślę, że dostaję nagrodę gravekeepera za wskrzeszenie starego postu. 'knitr' uczynił cacheing o wiele bardziej wykonalnym. Nigdy nie mogłem naprawdę przekonać CacheSweave do pracy z pgfSweave. –