R Komut Dosyasını Planlama


113

Veritabanından bazı verileri çeken, üzerinde birkaç işlem yapan ve çıktıyı yeni bir veritabanına gönderen bir R betiği yazdım.

Bu betiğin her gün belirli bir saatte çalışmasını istiyorum ancak bunu etkili bir şekilde yapmanın bir yolunu bulamıyorum.

Bu sorunu çözmek için bakabileceğim bir kaynak öneren var mı? Bu komut dosyasını bir Windows makinesinde çalıştırıyorum.

Yanıtlar:


108

Aslında Windows altında Zamanlayıcıyı kullanmak için önce bir toplu iş dosyası oluşturmanız gerekmez .

  • Planlayıcıyı açın: BAŞLAT -> Tüm Programlar -> Aksesuarlar -> Sistem Araçları -> Zamanlayıcı
  • Yeni bir Görev oluştur
  • Eylem sekmesinin altında yeni bir eylem oluşturun
  • Programı Başlat'ı seçin
  • Buraya yerleştirilmesi gereken Rscript.exe dosyasına göz atın :
    "C: \ Program Files \ R \ R-3.0.2 \ bin \ x64 \ Rscript.exe"
  • dosyanızın adını parametreler alanına girin
  • Başlangıç alanında komut dosyasının bulunacağı yolu girin
  • gidin Tetikleyiciler sekmesine
  • yeni tetikleyici oluştur
  • bu görevin her gün , her ay yapılması gerektiğini seçin ... birkaç kez tekrarlayın veya ne istersen

3
Evet teşekkür ederim! Bu benim için işe yaradı, yukarıdakiler ve web'de dolaşan diğer çeşitli cevaplar değil. Yalnızca dosya uzantısının olduğundan .Rve OLMADIĞINDAN emin olun .r.
esa606

Bununla tam olarak ne demek istiyorsun - ne olmasını beklerdin? Belki bu kendi başına bir soruya girmeli (belki de SO'da zaten bir cevap vardır).
petermeissner

1
Dos penceresini küçültmenin bir yolu var mı?
George Dontas

58

R betiğinizin içinde mytest.rbulunduğunu varsayarsak D:\mydocuments\, aşağıdaki komutu içeren bir toplu iş dosyası oluşturabilirsiniz:

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

Daha sonra bunu, tetikleme koşullarını ayarlayarak Windows görev zamanlayıcısına yeni bir görev olarak ekleyin.

Toplu iş dosyasını da atlayabilirsiniz. Set C:\R\R-2.10.1\bin\Rcmd.exeiçinde program/scriptgörev planlayıcıda metin ve aynı vermek Argumentsilk komutun geri kalanı:BATCH D:\mydocuments\mytest.r

Windows Görev Zamanlayıcı aracılığıyla R Görevlerini Zamanlama (Yayınlanma tarihi: 11 Şubat 2015)

taskcheduleR: Windows görev yöneticisi ile R komut dosyalarını planlamak için R paketi (Yayınlanma tarihi: 17 Mart 2016)

DÜZENLE

Kısa süre önce toplu iş dosyalarının kullanımını yeniden benimsedim, çünkü cmd penceresinin küçültülmesini istedim (başka bir yol bulamadım).

Özellikle, Windows görev zamanlayıcı Actionssekmesini aşağıdaki gibi dolduruyorum :

Program/script:

cmd.exe

Add arguments (optional):

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

Mytest.bat içeriği :

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


16
Kullanılması Rscripttercih edilir R BATCH. Küçük ve büyük harf arasında ayrım yapabilen sistemler rde olur.
Dirk Eddelbuettel

Teşekkürler, kullanmadım. Gördüğüm gibi, argümanlar betiğe de aktarılabilir ve bunlara commandArgs kullanılarak erişilebilir
George Dontas

5

Şimdi bunu yapmak için RStudio'da yerleşik bir seçenek var, programlayıcıyı ilk önce aşağıdaki paketleri kurmak için çalıştırın

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

Yükledikten sonra şuraya gidin:

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

görüntü açıklamasını buraya girin


Bu benim için çalışmıyor. Eklentiyi çalıştırmayı denediğimde, aşağıdaki hataları alıyorum: Gerekli ad alanı yükleniyor: parlak Hatayla başarısız oldu: 'matris sütunlarının sayısı eşleşmeli (bkz. Arg 2)' Gerekli ad alanı yükleniyor: miniUI Başarısız oldu hata: 'sütun sayısı matris sayısı eşleşmeli (arg 2'ye bakın) 'rbind hatası (bilgi, getNamespaceInfo (env, "S3methods")): matrislerin sütun sayısı eşleşmelidir (bkz. arg 2)
obewanjacobi

Bu hatayı denemek ve düzeltmek için sadece data.table güncellendi ve şimdi şunu alıyorum: Hata: 'data.table' ad alanı yüklenirken 'as.xts' nesnesi bulunamadı
obewanjacobi

1
Bunların çalışması için RStudio'nun açık kalması gerekiyor mu?
cgage1

1
Bence R studio yakınsa otomatik olarak açacak ve betiği çalıştıracak.
Zeeshan

4

Görevlerimi SCHTASKSprogram üzerinden kuruyorum. Başlangıçta komut dosyalarını çalıştırmak için, satırları boyunca bir şeyler yazarsınız.

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

Daha fazla ayrıntı için bu web sitesine bakın SCHTASKS. Microsoft'un web sitesinde daha fazla ayrıntı .



3

Görev zamanlayıcısını ayarlama

Adım 1) Görev zamanlayıcıyı açın (Başlat> Görev Zamanlayıcı ara)

Adım 2) "İşlem"> "Görev Oluştur" u tıklayın.

Adım 3) "Yalnızca kullanıcı oturum açtığında çalıştır" ı seçin, "En yüksek ayrıcalıklarla çalıştır" seçeneğinin işaretini kaldırın, görevinize ad verin, "Windows Vista / Windows Server 2008" için yapılandırın

görüntü açıklamasını buraya girin

Adım 4) "Tetikleyiciler" sekmesinin altında, komut dosyasının ne zaman çalışmasını istediğinizi ayarlayın

Adım 5) "İşlemler" sekmesinin altına, Rscript.exe dosyasının tam konumunu, yani

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

İle birlikte senaryonun adını koyun -eve source()bu şekilde sarma argümanlar içinde:

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

görüntü açıklamasını buraya girin

Görev Zamanlayıcı'da zamanlanmış bir Rscript ile ilgili sorunları giderme

Görev Zamanlayıcı'yı kullanarak bir komut dosyası çalıştırdığınızda, herhangi bir hata mesajı almadığınız için herhangi bir sorunu gidermek zordur.

Bu, sink()tüm hata mesajlarının belirttiğiniz bir dosyaya çıktısını almanıza olanak tanıyan R'deki işlev kullanılarak çözülebilir . Bunu şu şekilde yapabilirsiniz:

# 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

})

Rscript'inizin çalışması için değiştirmeniz gereken diğer şey, komut dosyanızdaki herhangi bir dosya yolunun tam dosya yolunu belirlemektir.

Bu, görev zamanlayıcıda çalışmayacak:

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

Rscript'inizde kaynak sağladığınız tüm komut dosyalarının tam dosya yolunu belirtmeniz gerekecektir:

source("C:/location_of_my_script/functions/import_function.R")

1

Bu adımların herhangi bir kombinasyonunu "Argument Batch Ignored"izledikten ve R.exe çalıştıktan sonra hatayı aldıktan sonra, bunu deneyin, benim için çalıştı.

Windows Görev Zamanlayıcı'da:

BATCH "C:\Users\desktop\yourscript.R"Bağımsız değişkenler alanında değiştirin

ile

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


1
Bu, Mark Byers'ın cevabına ilişkin bir yorum olarak mantıklı olacaktır (veya belki bu cevaba yönelik bir düzeltme), tek başına kalabileceğini sanmıyorum.
Gregor Thomas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.