2010-10-25 20 views
7

我正忙於爲一個對R很少了解的客戶編寫一個軟件包。考慮到他們複雜的數據結構,我需要在R中設置一個「數據庫」從他們從另一家公司獲得的一組電子表格中獲得的信息。由於他們無法在他們的計算機上安裝SQL等(ICT有一些電源控制問題...),我已經根據特定的目錄結構在R中編寫了仿真。現在我想自動運行它,但只是第一次加載包。類似於.First.lib,但接着.VeryFirst:安裝或使用軟件包時的第一次運行代碼

有關如何在首次加載包時加載一段代碼的任何想法?我無法在手冊中的任何地方找到它,所以所有的指針都是值得歡迎的。

+0

爲什麼不用'.First.lib'或'.onLoad'來檢查「數據庫」是否已經創建? – 2010-10-25 21:39:52

+0

@Joshua:我一直在考慮這個,但是想知道在R中是否有可能檢測一個包是否是第一次加載。我一直在研究使用INSTALL文件的可能性,但我並沒有完全掌握它們如何使用。 – 2010-10-25 21:52:00

+1

我不認爲你可以檢查包是否第一次加載。但是,如果您檢查「數據庫」並且它不在那裏,則創建該數據庫(這肯定會發生在第一次加載時)。下次您加載包時,請檢查「數據庫」,查看它已經存在,然後繼續。 – 2010-10-25 21:54:12

回答

4

這是在手冊中。

基本上你有兩個代碼路徑:沒有命名空間

  1. 包可以使用的功能.First.lib(),通常從R/zzz.R

  2. 包與命名空間可以從R/zzz.R使用功能.onLoad(),也常。

我已經使用這個技巧,例如在加載時有一個包更新本身(!!)。這需要在實際加載二進制代碼之前不使用NAMESPACE並運行utils::update.packages()

+0

Thx的答案,但不要每次加載包時,這些函數加載代碼,或者我得到的幫助文件完全錯誤?我只想在第一次加載包時調用代碼。 – 2010-10-25 21:50:04

+0

當然,所以你使用'file.exists()'和朋友來檢查結構是否存在,並跳過創建第二,第三,...時間。但是你問在創業時在哪裏創建它,我試圖回答這個問題。 – 2010-10-25 22:01:27

+0

包是否可以在Windows上自行更新?或者奇怪的文件鎖定會導致問題? – hadley 2010-10-26 03:03:38

0

怎麼樣爲他們指定一個路徑和名稱來放入電子表格。您可以遞歸目錄以獲取更新和文件。我這樣做是爲了一個類似的問題。

2010 08.xls 2010 09.xls

你可以使用的ReadLine()來提示輸入新的數據範圍,以及使它所以他們只需要鍵入新的月份。如果目錄發生了變化,教人們如何setwd()或使用腳本來更新它自己並不難,因爲腳本會檢查個人/公司服務器上的某些內容。

他們實際上正在加載R來運行軟件包嗎?還是全部是命令行?

相關問題