r
  • process
  • queue
  • condor
  • 2014-01-09 61 views 3 likes 
    3

    我想我有一個簡單的問題,因爲我在上下查找互聯網,找不到其他人問這個問題: 我的大學有一個Condor set-向上。我想運行幾次相同的代碼(例如100次)。我R代碼裏面有一個程序存儲在一個文件中的結果,即:如何從CONDOR獲取排隊編號到您的R作業

    write.csv(res, file=paste(paste(paste(format(Sys.time(), '%y%m%d'),'res', queue, sep="_"), sep='/'),'.csv',sep='',collapse='')) 
    

    資源是我的結果(一data.frame),我表明,該文件包含有「資源」的結果,最後我想添加此計算的隊列號(否則文件將被替換,是不是?)。它應該看起來像:140109_res_1.csv,140109_res_2.csv,...

    我提交文件,禿鷹是這樣的:

    universe = vanilla 
    executable = /usr/bin/R 
    arguments = --vanilla 
    log = testR.log 
    error = testR.err 
    input = run_condor.r 
    output = testR$(Process).txt 
    requirements = (opsys == "LINUX") && (arch == "X86_64") && (HAS_R_2_13 =?= True) 
    request_memory = 1000 
    should_transfer_files = YES 
    transfer_executable = FALSE 
    when_to_transfer_output = ON_EXIT 
    queue 3 
    

    我不知道我怎麼得到「排隊」號進入我的[R碼?我試了一個簡單的例子

    print(queue) 
    print(Queue) 
    

    但是沒有找到對象叫做隊列或隊列。有什麼建議麼? 祝福, Marco

    +0

    如何使用for循環重複該代碼,然後在名稱中添加'i'。我使用的其他選項是將時間添加到文件名中,這樣我就知道哪一個是在哪一個之前創建的(儘管它在文件的屬性中),並且我得到了不被覆蓋的不同文件。 – Llopis

    +0

    好的,也許是一個錯誤的想法。我有一個計算循環和內部的一切(不能是子集),我想重複這個計算N次。因此,我想我會告訴condor在N臺機器上執行這個操作(使用'queue N')。這是錯誤的方式? –

    +0

    對不起,我想我誤解了這個問題,代碼是關於'condor'不是R,雖然它運行了一個R程序。關於它我不禁幫助我也對從另一種語言的輸入感興趣到R ... – Llopis

    回答

    2

    好的,我解決了這個問題。這是怎麼回事:

    1. 我不得不改變我的提交文件。我改變了時隙參數:

      參數= --vanilla --args $(處理)

    2. 現在進程號被轉發到R代碼。在那裏你可以用下面一行來檢索它。該值將被存儲爲一個字符。因此,您應該將其轉換爲數字值(同時檢查像10這樣的數字是否傳遞爲'1'和'0',在這種情況下,您還應該摺疊這些值)。

      運行< - commandArgs(TRUE)

    這裏是我讓運行的代碼的一個例子。

    > run <- commandArgs(TRUE) 
    > run 
    [1] "0" 
    > class(run) 
    [1] "character" 
    > try(as.numeric(run)) 
    [1] 0 
    > try(run <- as.numeric(paste(run, collapse=''))) 
    > try(print(run)) 
    [1] 0 
    > try(write(run, paste(run,'csv', sep='.'))) 
    

    您還可以找到信息如何在變量/參數傳遞給您的代碼在這裏:http://research.cs.wisc.edu/htcondor/manual/v7.6/condor_submit.html

    我希望這可以幫助任何人。 歡呼和感謝所有其他評論者! Marco

    相關問題