2014-09-27 55 views
0

我需要模擬一些數據,我想有一切內置的功能,所以我只需要運行R:名稱與功能定義的名稱的函數裏創建的對象

simulate(scenario="xxx") 

該功能將所有指定場景的模擬數據集存儲在名爲simdat的列表中。在函數中,我想重命名該列表「simdat.xxx」並將其保存爲「simdat_xxx.RData」,所以稍後我可以加載該文件並訪問列表simdat.xxx。我需要列表中有一個專門指向哪個批次的名稱,因爲我正在處理大量批次,並且我可能想要同時加載多個批次。

有沒有辦法在一個函數內建立一個名稱並用它來命名一個對象?我一遍又一遍地搜索,找不到辦法做到這一點。無奈之下,我訴諸這樣做:在函數中,

(a)使用粘貼寫一個臨時的腳本,它看起來像這樣

temp.fn <- function(simdat){ 
    simdat.xxx <- simdat 
    save(simdat.xxx,file="simdat_xxx.RData") 
    } 

(二)使用writeLines寫出來的.R文件

(C)的源文件

(d)運行

這嚴重似乎有點小題大做了我。有一個更好的方法嗎?

非常感謝您的幫助!

+0

你可能要考慮對'saveRDS()/ readRDS()';您只需將對象分配給您讀取時想要的任何名稱(例如,基於Rdata文件名)即可。 – baptiste 2014-09-27 00:56:27

+0

@baptiste - 哇!也謝謝你。真的很感激它! – 2014-09-27 01:02:12

+0

我要'saveRDS()'。它非常乾淨。我想知道爲什麼我沒有想到之前尋找另一個保存選項。我想最難知道的是你不知道的。 – 2014-09-27 01:22:37

回答

1

試試這個,

simulate <- function(scenario="xxx"){ 

    simdat <- replicate(4, rnorm(10), simplify=FALSE) 
    data_name <- paste("simdat", scenario, sep=".") 
    assign(data_name, simdat) 
    save(list = data_name, file = paste0("simdat_", scenario, ".Rdata")) 
} 
+0

非常感謝你。 'assign'比任何頭痛藥都好!也感謝'paste0'。我以前總是使用'paste(sep =「」,...)',這樣更加整潔。 – 2014-09-27 00:58:47