2011-10-13 30 views
3

大家好,我XTS結構是申請家庭功能循環:替換與上XTS

head(sym) 

        BidSize Bid Ask AskSize Quantity Mid 
    2006-01-04 09:01:00 3771 181000 182000 5783 15625 181500 
    2006-01-04 09:02:00 3952 181000 182000 5659  180 181500 
    2006-01-04 09:03:00 3556 181000 182000 5943  1059 181500 
    2006-01-04 09:04:00 3747 181000 182000 6133  261 181500 
    2006-01-04 09:05:00 3957 181000 182000 6077  101 181500 
    2006-01-04 09:06:00 3898 181000 182000 6511  311 181500 

我有一個函數getTickSize(x,date)這是專爲x作爲一個單一的數字(不是數組)。

我想如果可以通過「智能」,以取代循環以下調用的函數

for (i in 1:nrow(sym[1:10])){ 
    sym$TS[i] <- getTickSize(sym$Mid[i],index(sym)[i]) 
    } 

任何指針申請家庭?我所有的努力遭到了以下警告:

the condition has length > 1 and only the first element will be used 
+0

我建議你重新編寫'getTickSize'函數來操作數組。 –

+0

感謝您的建議任何鏈接或指向「矢量化」功能? – qaTK

回答

1

我相信,在這種情況下,mapply是最簡單的解決方案:

sym$TS<-mapply(getTickSize, sym$Mid, index(sym)) 

注:*apply系列函數並不總是比簡單越好循環(圍繞這個日期的大部分神話可以追溯到S的早期版本)。

但我承認它看起來更性感。

+0

謝謝,按預期工作。同樣如預期的那樣,沒有性能提升,但性感的代碼。 – qaTK