2016-12-01 51 views
1

我正在Rstudio中構建我的R包,當我厭倦了創建包的小插件時,遇到了一些意想不到的問題。當我在Rstudio中點擊構建/加載面板時,我創建了包的文檔時出現了小插件錯誤。爲了可能解決我得到的暈影錯誤,我必須將外部數據添加到我的包中,使用此數據來相應地編譯包裝小插圖。我用devtools::install()命令來安裝我的軟件包,但沒有創建inst/目錄。 extdata必須位於inst目錄中。我還用devtools::use_data()從我的電腦中添加我的數據,但我無法添加我的外部數據。我如何爲我的包加載外部數據?我想我不應該手動創建extdata並在那裏放置外部數據。爲什麼inst/在我使用devtools::install()時未被創建?如何將一組csv文件作爲外部數據添加到我的包中?如何將外部數據文件添加到開發R包中?

這是玩具輔助函數,我會在我的小插曲用來讀取外部數據:

myFunc <- function(myDir, ...) { 
    files <- list.files(myDir, full.names = TRUE, "\\.csv$") 
    readMe <- lapply(files, read.csv) 
    return(readMe) 
} 

這是我第一次建立R封裝,得到一些常見的錯誤。如果我的問題沒有得到很好的說明,我的道歉。

找到文件inst/,我需要使用system.file(),但是我沒有這個目錄,加上myFunc接受文件目錄搶文件和讀取它們爲.csv,這是玩具的代碼塊可以執行在小插曲文件中:

```{r} 
library(myPkg) 
file.1 <- system.file("extdata", "xxx.csv", "myPkg") 
file.2 <- system.file("extdata", "yyy.csv", "myPkg") 
myFunc(list(file.1, file.2)) 

``` 

如何將外部數據加載到我的包中以便使用此數據編譯包裝小插曲?爲什麼inst/不是在我點擊devtools::installl()時創建的?任何人都可以幫助我如何做到這一點?在此先感謝:)

回答

3

您應該在項目的基本目錄(其中DESCRIPTION是)手動創建inst/extdata/file.csv。您可以將您想要訪問的所有文件放入該目錄中。

然後拿到文件在功能上的實例或您的小插曲:

files <- lapply(list.files(system.file('extdata', package = 'my_package'), full.names = TRUE), read.csv) 

system.file()的路徑返回到extdata文件夾,然後list.files()extdata創建的所有文件的載體。最後,運行lapply()read.csv()應該將所有文件的內容讀取到一個列表中。

+0

我認爲inst /目錄可以由Rstudio在安裝我​​的軟件包時自動創建。我在github中查看了其他人的軟件包。另外,我的數據可能是多個csv文件,其中system.file()只能找到單個文件。我怎樣才能使這個更具編程性?請有更好的主意嗎? – Jerry

+0

也許RStudio可以,但當我手動創建文件夾時,它對我來說同樣適用。我更新了代碼來說明所有文件。這有幫助嗎? – CephBirk

+0

如果我需要通過使用system.file()來查找csv文件列表,我該如何使這個更具編程性? – Jerry