2012-05-17 40 views
2

無法解釋跳我用data.table包我自己的包內,我導入命名空間和描述文件data.table命名空間。 在我的職務,我會用上data.table函數data.frame轉換成data.tableR:進口data.table包命名空間,內存消耗

dt <- data.table(df) 

但是,當我把我的函數,在調用data.table()的內存使用情況的即時點和跳躍R只是停止響應。 當我逐行運行並且內存消耗低時,該函數內的代碼正常工作。 另外,如果我把庫(data.table)放在我的函數中,一切都很好。我試圖避免將庫(data.table)放入我的函數中,而是聲明依賴關係。但是,這種方式似乎有些問題。我在Mac OS X上運行R-2.14.0 10.6.8

任何人能解釋這可能是一個原因,我怎麼能解決這個問題(不使用庫(data.table)我的函數中)?

+2

如何在名稱空間和描述文件中進行導入? – Dason

+2

如果沒有可重現的例子,很難診斷問題。你能提供你的包裹的來源嗎? – jthetzel

回答

3

沒有特定的順序有些隨機猜測:

嘗試使用Imports或僅在描述取決於現場。我不認爲你還需要在NAMESPACE中導入,但我可能是錯的。爲什麼這會解釋內存使用,雖然,不知道。

什麼是df?它是大的或以某種方式遞歸或奇怪的?如果可能,請提供str(df)告訴我們關於它的一些信息。

嘗試as.data.table(df)data.table(df)更快。但這聽起來像你的問題是不同的。

您的函數調用是否被重複調用?我可以看到爲什麼一再轉換dfdt會佔用內存,但不是爲什麼只是調用library(data.table)會使速度更快。

嘗試從R --vanilla開始R以確保沒有.Rdata(其中可能包括屏蔽data.table的函數)在啓動時加載等等。如果你開發了自己的包,那麼某種函數名稱衝突,或者路徑上的包的順序聽起來似乎合理。

否則,我們需要更多信息。我不記得任何類似的事情發生在我身上,或者之前有過報道。

而且,您使用的這些data.table版本?有在此V1.8.1錯誤修復上R-鍛造(未上CRAN尚未):

  • 移至data.table設置代碼從.onAttach.onLoad使得當data.table只是import ED從內它也運行一個包,修復#1916有關缺少data.table選項。

但是,如果你正在使用從CRAN 1.8.0,並導入(只),而不是依賴,那麼我希望你能得到有關失蹤的選項,而不是在內存消耗跳躍的錯誤。

+0

我正在使用data.table v1.8.0。所以,如果我只導入,我應該得到一個錯誤信息,但我沒有。在這種情況下,似乎在搜索路徑中發現了一些其他的data.table函數,導致大量的內存消耗。 我曾嘗試把data.table放在Depends下,而且一切正常。 df是一個data.frame,包含〜500000行和4列,並且當我使用data.table運行代碼時,取決於內存消耗是〜2 GB。但是,當data.table位於Imports下時,相同代碼的內存消耗約爲40 GB(我試圖在服務器上而不是在Mac上運行它) – Vanja

+0

您可以升級到1.8.1嗎?至少只是爲了看看這個錯誤修復是否修復它。你說在搜索路徑中找到另一個data.table函數,你能找到它嗎? –

+0

升級到1.8.1修復了一切。現在它對於導入和依賴都正常工作。 我不知道在導入時放置舊版本時出現了什麼問題。看起來data.table是以某種方式創建的,儘管我在搜索路徑中找不到data.table函數?!: cat(class(df)) > data.frame find(「data.table」) >字符(0) DT < - data.table(DF)*跳躍在存儲器 貓(類(DT)) > data.table data.frame 所以data.table已經被創建,但是,當試圖在創建的dt上使用「[」函數,會出現關於丟失選項的錯誤。 – Vanja