2
我有以下的R代碼裏面加載從多個文件XTS的時間序列,並在一個單一的XTS矩陣將它們合併:R:加載XTS系列從多個文件合併爲一個塊
load.files = function(dates, filenames) {
for(i in 1:length(dates)) {
# load and merge each xts block
ts.set = load.single.file(dates[i], filenames[i])
if(i == 1)
ts.all = ts.set
else
ts.all = rbind(ts.all, ts.set)
}
return(ts.all)
有沒有辦法來
- 避免初始化第一個ts.set所需的if/else語句?
- 完全避免for循環?
這似乎工作,但是我得到這些警告消息的電話lapply。這是什麼意思?請注意,我在我的版本中使用了一個額外的參數:l = lapply(日期,load.ets.trades,文件名)警告消息:1:在文件(file,「rt」)中:只有'description'參數的第一個元素使用2:在文件(文件,「rt」)中:只使用'description'參數的第一個元素 – 2012-01-04 23:29:33
文件名是一個列表/矢量,但load.ets.trades期望單個字符串?使用日期[我]與文件名[我]有一個不好的_smell_。而將它們作爲數據幀/矩陣中的兩列感覺更強大。 (然後你使用()或apply(),請參閱http://stackoverflow.com/questions/1699046/foreach-row-in-an-r-dataframe) – 2012-01-05 01:47:54
正如@DarrenCook提到的那樣,警告告訴你,在lapply迭代,'load.ets.trades()'被傳遞給整個'filenames'向量。它只使用第一個,並且一次又一次地警告你它正在這樣做。我使用的解決方案是使用調用'mapply()',這是專爲這種情況而設計的。你的調用看起來像'l < - mapply(FUN = load.ets.trades,date = dates,filename = filenames)',其中'date'和'filename'是'load.ets中形式參數的名字.trades'。請讓我們知道這(或其他)解決您的問題。 – 2012-01-05 05:10:52