2015-10-31 59 views
1

即使我從blog.fosstrading.com/2011/08/tactical-asset-allocation-using.html複製粘貼示例我得到這個錯誤:使用addPosLimit和osMaxPos在PosLimit [,「MaxPos」中拋出錯誤:不正確的維數「

error in PosLimit[, "MaxPos"] : incorrect number of dimensions 

這是一個錯誤還是我錯過了什麼?從sessionInfo()

輸出:

R version 3.2.2 (2015-08-14) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] dplyr_0.4.3     quantstrat_0.9.1687   foreach_1.4.2     
[4] blotter_0.9.1695    PerformanceAnalytics_1.4.3662 FinancialInstrument_1.2.0  
[7] quantmod_0.4-5    TTR_0.23-0     xts_0.9-7      
[10] zoo_1.7-12     

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.1  lattice_0.20-33 codetools_0.2-14 assertthat_0.1 grid_3.2.2  
[6] R6_2.1.1   DBI_0.3.1  magrittr_1.5  iterators_1.0.7 tools_3.2.2  
[11] parallel_3.2.2 
+0

我剛剛在博客文章中運行代碼,它工作。我正在使用quantstrat和blotter的最新版本。請將'sessionInfo()'的輸出添加到您的問題中。 –

+0

完成。我嘗試清除環境並重新啓動R,但它沒有幫助 – nesvarbu

+0

似乎getPosLimit()中的第5行(PosLimit = last(portf $ symbols [[symbol]] $ PosLimit [toDate]))返回數字。我有dplyr加載,它也有最後一個功能,所以我很確定這是一個問題。一般如何解決這個問題在R? – nesvarbu

回答

3

你dplyr加載。它定義了一個掩碼通用函數lag的函數,即stats::lagdplyr::lag不執行任何方法調度,所以有一個滯後方法在某個地方不應該被調用。

dplyr也掩蓋了在xt中定義的firstlast泛型,這也可能導致問題。

短期的解決方法是首先調用library(dplyr),所以xt中的firstlast將掩蓋它們在dplyr中的couterparts。長期的解決方案是,所有軟件包都應該明確導入它們使用的所有函數,以避免因加載/附加軟件包的順序而導致的問題(請注意,用戶的非打包代碼仍將受軟件包加載/附加命令的影響)。

+0

短期解決方案實際上是糟糕的編程習慣:)如果來自其他軟件包的函數只是略有不同,並且不會拋出錯誤而只是默默地稍微改變輸出?我認爲長遠的解決方案會更好:) – nesvarbu

+0

@nesvarbu:這也是*真的*不好的做法,掩蓋泛型函數,而不是派遣。正如我在答覆中所說的,由於dplyr的作用,用戶的非打包代碼將受到打包加載/附加訂單的影響。我無法改變這一點。我提到了短期解決方案,所以你會有一些工作*現在*。我說「短期」表明它不理想。如果您實施長期解決方案並提供補丁,將不勝感激。這對我來說不是重中之重。 –

+0

肯定約書亞。也許當我有更多的經驗與R我做 – nesvarbu

相關問題