2014-09-30 83 views
5

我想分享一些軟件作爲一個軟件包,但是我的一些腳本似乎並不像函數那樣很自然。例如,考慮下面的代碼塊,其中'raw.df'是包含離散和連續類型的變量的數據幀。函數'count.unique'和'squash'將在包中定義。該腳本將數據框分成兩個框架,'cat.df'被視爲分類數據,'cts.df'被視爲連續數據。在R軟件包中包含R腳本

我的想法是,用戶可以讀取數據框'raw.df',獲取腳本,然後交互編輯'cat.df'和'cts.df',也許組合一些分類和變換一些變量。

dcutoff <- 9 
tail(raw.df) 
(nvals <- apply(raw.df, 2, count.unique)) 
p <- dim(raw.df)[2] 
(catvar <- (1:p)[nvals <= dcutoff]) 
p.cat <- length(catvar) 
(ctsvar <- (1:p)[nvals > dcutoff]) 
p.cts <- length(ctsvar) 
cat.df <- raw.df[ ,catvar] 
for (i in 1:p.cat) cat.df[ ,i] <- squash(cat.df[ ,i]) 
head(cat.df) 
for(i in 1:p.cat) { 
    cat(as.vector(table(cat.df[ ,i])), "\n") 
}  
cts.df <- raw.df[ ,ctsvar] 
for(i in 1:p.cts) { 
    cat(quantile(cts.df[ ,i], probs = seq(0, 1, 0.1)), "\n") 
} 

現在,這當然可以作爲函數返回一個包含nvals,p,p.cat,cat.df等的列表;然而這對我來說似乎相當難看。然而,將腳本包含在軟件包中的唯一條件似乎是'demo'文件夾,這似乎不是正確的方法。對於如何進行的建議將非常感激。

(但感激之情不會因爲它似乎是用註釋表示感謝已棄用正式表達。)

+2

我使用'研究所/腳本/'還能使文件真正的(可執行文件)腳本利特勒。 – 2014-09-30 03:51:09

+2

爲什麼函數返回這些數量看起來很醜陋?是否因爲它不會像腳本中那樣打印出來?你可以使你自己的自定義打印功能做到這一點...... – Dason 2014-09-30 04:27:32

+0

德克 - 你知道使用這種方法的包嗎? – 2014-09-30 20:59:21

回答

4

這是更好地封裝代碼的功能。返回列表並不難看,例如,S3對象只是列表屬性類別

object <- list(attribute.name = something, ..) 
class(object) <- "cname" 
return (object) 

您還可以使用inst文件夾,因爲inst子目錄的內容將被遞歸地複製到安裝目錄(如德克評論中提及)。

  1. 您創建一個文件夾研究所:

    inst 
    ----scripts 
        some_scripts.R 
    
  2. 你可以在你的包從一個函數調用它,並且使用system.file機制加載它。

    load_myscript <- function(){ 
        source(system.file(package='your_pkg_name','scripts/some_scripts.R')) 
    } 
    
  3. 你把它作爲你的包中的任何其他功能:通過RSCRIPT或

    load_myscript() 
    
+0

我會檢查一下。 – 2014-09-30 21:03:48