Planowanie skryptu R.

113

Napisałem skrypt R, który pobiera dane z bazy danych, wykonuje na niej kilka operacji i umieszcza dane wyjściowe w nowej bazie danych.

Chciałbym, aby ten skrypt uruchamiał się codziennie o określonej godzinie, ale nie mogę znaleźć żadnego sposobu, aby to zrobić skutecznie.

Czy ktoś może polecić zasób, z którego mógłbym skorzystać, aby rozwiązać ten problem? Uruchamiam ten skrypt na komputerze z systemem Windows.

ETD
źródło

Odpowiedzi:

108

Właściwie w systemie Windows nie musisz nawet najpierw tworzyć pliku wsadowego, aby użyć harmonogramu .

  • Otwórz harmonogram: START -> Wszystkie programy -> Akcesoria -> Narzędzia systemowe -> Harmonogram
  • Utwórz nowe zadanie
  • na karcie Akcja utwórz nową akcję
  • wybierz Start Program
  • przejdź do Rscript.exe, który powinien być umieszczony np. tutaj:
    "C: \ Program Files \ R \ R-3.0.2 \ bin \ x64 \ Rscript.exe"
  • wprowadź nazwę pliku w polu parametrów
  • Wejście ścieżka gdzie skrypt można znaleźć w menu Start w polu
  • przejdź do zakładki Wyzwalacze
  • utwórz nowy wyzwalacz
  • wybierz, że zadanie powinno być wykonywane każdego dnia , miesiąca, ... powtarzane kilka razy lub cokolwiek chcesz
petermeissner
źródło
3
Tak dziękuję! To właśnie zadziałało w moim przypadku, a nie powyższe i nie różne inne odpowiedzi krążące po sieci. Dodam tylko, że upewnij się, że rozszerzenie pliku jest .Ri NIE .r.
esa606
Co dokładnie przez to rozumiesz - czego byś się spodziewał? Może to powinno stanowić samo pytanie (być może odpowiedź jest już na SO).
petermeissner
1
Czy istnieje sposób na zminimalizowanie okna DOS?
George Dontas
58

Zakładając, że twój skrypt R znajduje mytest.rsię w D:\mydocuments\, możesz utworzyć plik wsadowy zawierający następujące polecenie:

C:\R\R-2.10.1\bin\Rcmd.exe BATCH D:\mydocuments\mytest.r

Następnie dodaj je jako nowe zadanie do harmonogramu zadań systemu Windows, ustawiając tam warunki wyzwalania.

Możesz również pominąć plik wsadowy. Ustaw C:\R\R-2.10.1\bin\Rcmd.exew polu program/scripttekstowym w harmonogramie zadań i podaj jako Argumentsresztę początkowego polecenia:BATCH D:\mydocuments\mytest.r

Planowanie zadań języka R za pomocą Harmonogramu zadań systemu Windows (opublikowano 11 lutego 2015 r.)

taskcheduleR: Pakiet R do planowania skryptów R za pomocą menedżera zadań systemu Windows (opublikowano 17 marca 2016 r.)

EDYTOWAĆ

Niedawno ponownie przyjąłem użycie plików wsadowych, ponieważ chciałem zminimalizować okno cmd (nie mogłem znaleźć innego sposobu).

W szczególności wypełniam Actionskartę harmonogramu zadań systemu Windows w następujący sposób:

Program/script:

cmd.exe

Add arguments (optional):

/ c start / min D: \ mydocuments \ mytest.bat ^ & exit

Zawartość mytest.bat :

C: \ R \ R-3.5.2 \ bin \ x64 \ Rscript.exe D: \ mydocuments \ mytest.r params

George Dontas
źródło
16
Używanie Rscriptjest lepsze niż R BATCH. Systemy, które potrafią rozróżniać małe i duże litery, również otrzymują r.
Dirk Eddelbuettel
Dzięki, nie użyłem go. Jak widziałem, argumenty można również przekazać do skryptu i uzyskać do nich dostęp za pomocą commandArgs
George Dontas
5

Teraz w RStudio jest wbudowana opcja, aby to zrobić, aby uruchomić harmonogram pierwszej instalacji poniżej pakietów

  install.packages('data.table')
  install.packages('knitr')
  install.packages('miniUI')
  install.packages('shiny')
  install.packages("taskscheduleR", repos = "http://www.datatailor.be/rcube", type = 
  "source")

Po zainstalowaniu przejdź do

**TOOLS -> ADDINS ->BROWSE ADDINS ->taskscheduleR -> Select it and execute it.**

wprowadź opis obrazu tutaj

Zeeshan
źródło
To nie działa na mnie. Kiedy próbuję uruchomić dodatek, otrzymuję następujące błędy: Ładowanie wymaganej przestrzeni nazw: błyszczące Niepowodzenie z błędem: 'liczba kolumn macierzy musi być zgodna (patrz arg 2)' Ładowanie wymaganej przestrzeni nazw: miniUI nie powiodło się z błędem: 'liczba kolumn macierzy musi pasować (patrz arg 2) 'Błąd w rbind (info, getNamespaceInfo (env, "S3methods")): liczba kolumn macierzy musi pasować (patrz arg 2)
obewanjacobi
Właśnie zaktualizowałem data.table, aby spróbować naprawić ten błąd, a teraz otrzymuję następujący komunikat: Błąd: nie znaleziono obiektu „as.xts” podczas ładowania przestrzeni nazw „data.table”
obewanjacobi
1
Czy RStudio musi pozostać otwarte, aby te działały?
cgage1
1
Myślę, że jeśli R studio jest zamknięte, automatycznie je otworzy i uruchomi skrypt.
Zeeshan
4

Swoje zadania konfiguruję za pośrednictwem SCHTASKSprogramu. Aby uruchomić skrypty podczas uruchamiania, napisałbyś coś w stylu

SCHTASKS /Create /SC ONSTART /TN MyProgram /TR "R CMD BATCH --vanilla d:\path\to\script.R"

Więcej informacji na ten temat można znaleźć w tej witrynieSCHTASKS . Więcej szczegółów na stronie Microsoft .

Roman Luštrik
źródło
3

Konfigurowanie harmonogramu zadań

Krok 1) Otwórz harmonogram zadań (Start> wyszukaj Harmonogram zadań)

Krok 2) Kliknij „Akcja”> „Utwórz zadanie”

Krok 3) Wybierz „Uruchom tylko wtedy, gdy użytkownik jest zalogowany”, odznacz „Uruchom z najwyższymi uprawnieniami”, nazwij swoje zadanie, skonfiguruj dla „Windows Vista / Windows Server 2008”

wprowadź opis obrazu tutaj

Krok 4) Na karcie „Wyzwalacze” określ, kiedy chcesz uruchomić skrypt

Krok 5) W zakładce „Akcje” wpisz pełną lokalizację pliku Rscript.exe, tj

"C:\Program Files\R\R-3.6.2\bin\Rscript.exe" (include the quotes)

Umieścić nazwę skryptu zz -eoraz source()w argumentach otoczenie go tak:

-e "source('C:/location_of_my_script/test.R')"

wprowadź opis obrazu tutaj

Rozwiązywanie problemów ze skryptem Rscript zaplanowanym w Harmonogramie zadań

Po uruchomieniu skryptu za pomocą Harmonogramu zadań trudno jest rozwiązać jakiekolwiek problemy, ponieważ nie pojawiają się żadne komunikaty o błędach.

Można to rozwiązać za pomocą sink()funkcji w języku R, która umożliwia wyprowadzanie wszystkich komunikatów o błędach do określonego pliku. Oto jak możesz to zrobić:

# Set up error log ------------------------------------------------------------
error_log <- file("C:/location_of_my_script/error_log.Rout", open="wt")
sink(error_log, type="message")

try({

# insert your code here

})

Inną rzeczą, którą będziesz musiał zmienić, aby skrypt Rscript działał, jest określenie pełnej ścieżki do wszystkich ścieżek plików w skrypcie.

To nie zadziała w harmonogramie zadań:

source("./functions/import_function.R")

Będziesz musiał określić pełną ścieżkę do wszystkich skryptów, które pozyskujesz w swoim Rscript:

source("C:/location_of_my_script/functions/import_function.R")
ben.watson.ca
źródło
1

Po wykonaniu dowolnej kombinacji tych kroków i wyświetleniu "Argument Batch Ignored"błędu po uruchomieniu programu R.exe, spróbuj tego, zadziałało.

W Harmonogramie zadań systemu Windows:

Zastąp BATCH "C:\Users\desktop\yourscript.R"w polu argumentów

z

CMD BATCH --vanilla --slave "C:\Users\desktop\yourscript.R"

Starbucks
źródło
1
Miałoby to sens jako komentarz do odpowiedzi Marka Byersa (lub może zmiana tej odpowiedzi), nie sądzę, że może istnieć samodzielnie.
Gregor Thomas