2012-03-30 33 views
2

我已經創建了一個R腳本,它需要首先加載一些庫。R腳本和庫預加載?

問題是腳本需要1.6秒來完成其計算(使用Linux命令「time」測量它多次),只需要0.7秒就可以加載庫!

該腳本運行頻率很高,因此庫加載的延遲幾乎佔實際工作負載的80%!

有沒有辦法讓庫預加載,以便每次腳本運行時都不會加載它們?

任何其他建議,以繞過這種緩慢?

#!/usr/bin/Rscript 

library(methods, quietly=TRUE, warn.conflicts = FALSE) 
library(MASS, quietly=TRUE, warn.conflicts = FALSE) 
library(RBGL, quietly=TRUE, warn.conflicts = FALSE) 
library(igraph, quietly=TRUE, warn.conflicts = FALSE) 
library(bnlearn, quietly=TRUE, warn.conflicts = FALSE) 
library(gRbase, quietly=TRUE, warn.conflicts = FALSE) 
library(gRain, quietly=TRUE, warn.conflicts = FALSE) 
.. 
.. 
+0

Vangelis,我有類似的問題,你有沒有使用Rserve()作爲駐地R實例,並從R客戶端連接到它? – user1103294 2013-03-09 23:30:25

+0

不,我還沒有嘗試過。這個腳本是作爲一個碩士論文的原型概念驗證,因此目前沒有必要提高速度。它被添加到我還沒有花時間的「未來工作」部分。 – 2013-03-10 14:58:57

回答

5

如果你把你的腳本轉換爲包(你應該無論如何,在較長的運行...),那麼你可以只使用你從使用軟件包需要的符號Imports - 這是典型的比Depends所做的滿載要快一點。

所以關鍵是要

  1. 使用包
  2. 瞭解NAMESPACE
  3. import正是您所需要的符號。

正交方法是不重新啓動,並保存時間---你可以使用Rserve作爲常駐[R實例,只需連接到它的R客戶端。可能更多的工作,雖然...

+0

持久的R實例聽起來像是更快的方法,尤其是從長遠來看。它有多糟? – sarnold 2012-03-30 02:45:46

+0

我不知道你是否可以A)使用包函數將你的函數寫入一個環境,B)限定名字空間,C)字節編譯函數到環境中,D)保存環境,然後每次加載它腳本運行?您可以將它附加到會話中,使其與全局中的功能相同? – Hansi 2012-03-30 07:28:34

+0

感謝您的回答。將嘗試您的建議。我現在需要閱讀更多關於NAMESPACE和RServe的內容,因爲我之前對他們沒有任何線索。 – 2012-03-30 11:53:10