2013-07-17 60 views
-1

我有一個由多個函數組成的腳本。我的腳本的總結例子看起來像如何將變量添加到R中的幾個函數並在命令行中運行它們

>Test.R 
massive.process_1 <- function() { 
    seed(123) 
    x <- do_something() 
    save(x, '/home/Result1.RData')  
} 

massive.process_2 <- function() { 
    seed(4) 
    x <- do_something() 
    save(x, '/home/Result2.RData')  
} 

massive.process_1() 
massive.process_2() 

我必須執行這個腳本,但不是2個_massive.processs_I需要運行其中的100個,但改變seed值並保存在每個步驟中的數據的名稱。我可以手動添加100 massive.process函數,但我想知道是否有任何方法將它放在腳本上以避免輸入100個函數?

非常感謝

我的bash文件以運行它如下:

#!/bin/bash 
echo Started analysis at: `date` 
rfile="Test.R" 
Rscript $rfile 
echo Finished analysis at: `date` 

回答

1

添加到丹尼斯的答案...

改變你可以使用「粘貼」的文件名。

massive.process <- function(i) { 
    seed(i) 
    x <- do_something() 
    outname = paste("/home/Result", i, ".RData", sep="") 
    save(x, outname) 
    x 
} 


for (i in 1:100){ 
    massive.process(i); 
} 

X = lapply(1:100, massive.process) 

如果您使用列表的方式,訪問第i個X,只使用X [I]

另一種方式來寫lapply環路與匿名函數。這可能會更清楚發生了什麼事情。

X = lapply(1:100, function(i){ 
    massive.process(i) 
}) 

以前的符號是相同的,只是更緊湊。

+0

的名稱與@kith_pradhan,每次函數在循環中執行時內存被擦除?我的意思是,我的真實功能需要大量的內存,所以我想保存'outname',然後再次運行第二個函數 – user2380782

+0

您的意思是函數massive.process在整個迭代中更新全局變量? – kith

+0

不,我的意思是,在每次迭代中刪除了函數massive.process中創建的對象嗎?因爲這些對象需要大量內存 – user2380782

0

爲什麼不添加種子作爲參數傳遞給函數?

massive.process <- function(seedValue) {...} 

在R中實現循環而不是使用shell腳本可能是一個好主意。

+0

用於執行每個函數的for循環可能是一個好主意,但如何每​​次更改種子值和保存文件的名稱? - – user2380782

+0

可以使用for循環修改種子值,但我不知道如何在每個循環中更改保存的文件 – user2380782

相關問題