R: Ошибка в xts - order.by - PullRequest
       9

R: Ошибка в xts - order.by

5 голосов
/ 06 июля 2011

Я пытаюсь (пере) построить базовую модель прогнозирования индекса S & P 500 (данные проистекают из финансов Yahoo)

У меня возникли некоторые трудности с "упорядочением" моего набора данных.
Во время построения data.model возникает следующая ошибка

Ошибка в xts (new.x, x.index): NROW (x) должен соответствовать длине (order.by)

После некоторых исследований я понимаю, что проблема заключается в упорядочении, и в нем, похоже, отсутствует упорядочение, как требуется для базового пакета зоопарка.

Есть ли элегантный способ решить эту проблему ?!Заранее спасибо

library(xts)
library(tseries)
library(quantmod)

GSPC <- as.xts(get.hist.quote("^GSPC",start="1970-01-02", 
quote=c("Open", "High", "Low", "Close","Volume","AdjClose")))

head(GSPC)

T.ind <- function(quotes, tgt.margin = 0.025, n.days = 10) {
 v <- apply(HLC(quotes), 1, mean)
 r <- matrix(NA, ncol = n.days, nrow = NROW(quotes))
 for (x in 1:n.days) r[, x] <- Next(Delt(v, k = x), x)
 x <- apply(r, 1, function(x) sum(x[x > tgt.margin | x <
 -tgt.margin]))
 if (is.xts(quotes))
 xts(x, time(quotes))
 else x
}


myATR <- function(x) ATR(HLC(x))[, "atr"]
mySMI <- function(x) SMI(HLC(x))[, "SMI"]
myADX <- function(x) ADX(HLC(x))[, "ADX"]
myAroon <- function(x) aroon(x[, c("High", "Low")])$oscillator
myBB <- function(x) BBands(HLC(x))[, "pctB"]
myChaikinVol <- function(x) Delt(chaikinVolatility(x[, c("High", "Low")]))[, 1]
myCLV <- function(x) EMA(CLV(HLC(x)))[, 1]
myEMV <- function(x) EMV(x[, c("High", "Low")], x[, "Volume"])[, 2]
myMACD <- function(x) MACD(Cl(x))[, 2]
myMFI <- function(x) MFI(x[, c("High", "Low", "Close")], x[, "Volume"])
mySAR <- function(x) SAR(x[, c("High", "Close")])[, 1]
myVolat <- function(x) volatility(OHLC(x), calc = "garman")[, 1]

library(randomForest)
data.model <- specifyModel(T.ind(GSPC) ~ Delt(Cl(GSPC),k=1:10) +
 myATR(GSPC) + mySMI(GSPC) + myADX(GSPC) + myAroon(GSPC) +
 myBB(GSPC) + myChaikinVol(GSPC) + myCLV(GSPC) +
 CMO(Cl(GSPC)) + EMA(Delt(Cl(GSPC))) + myEMV(GSPC) +
 myVolat(GSPC) + myMACD(GSPC) + myMFI(GSPC) + RSI(Cl(GSPC)) +
 mySAR(GSPC) + runMean(Cl(GSPC)) + runSD(Cl(GSPC)))

Ответы [ 2 ]

7 голосов
/ 06 июля 2011

traceback() показывает, что произошла ошибка при вызове Delt(Cl(GSPC),k=1:10):

> Delt(Cl(GSPC),k=1:10)
Error in xts(new.x, x.index) : NROW(x) must match length(order.by)

Delt ожидает (mx 1) объект, но вы передаете (mx 2) объект.Это связано с тем, что GSPC имеет два столбца, которые соответствуют Cl («Закрыть» и «AdjClose»).Это, вероятно, вызовет головные боли и в других областях ...

Cl ожидает объекты, подобные тем, которые были возвращены getSymbols, где скорректированный столбец закрытия называется «Скорректированный».Если вам по какой-то причине необходимо использовать get.hist.quote, просто переименуйте столбец «AdjClose» после загрузки данных.

colnames(GSPC) <- c("Open", "High", "Low", "Close","Volume","Adjusted")
Delt(Cl(GSPC),k=1:10)  # works now
2 голосов
/ 19 декабря 2016
## Error in xts(x, order.by = order.by, frequency = frequency, ...
##     NROW(x) must match length(order.by)

Я впустую потратил часы на эту ошибку.Независимо от того, была ли у меня точно такая же проблема, я покажу, как я решил это сообщение об ошибке, если оно избавит вас от боли.

Я импортировал файл Excel или CSV (пробовал оба)через несколько функций импорта, затем попытался преобразовать мои данные (как объект data.frame или .zoo) в объект xts и продолжал получать ошибки, включая эту.

Я попытался создать вектор дат, чтобы он передавался отдельно как параметр order.by.Я попытался убедиться, что вектор даты и строки data.frame совпадают.Иногда это работало, а иногда - нет, по причинам, которые я не могу объяснить.Даже когда это сработало, R «привел» все мои числовые данные в символьные данные.(Позволяет мне бесконечные проблемы, позже. Следите за принуждением, я узнал.)

Эти ошибки продолжались до тех пор, пока:

Для преобразования в xts я использовал столбец даты из импортированного листа Excel в качестве параметра order.by с модификатором as.Date () , AND I * отбросил столбец даты во время преобразования в xts. *

Вот рабочий код:

xl_sheet <- read_excel("../path/to/my_excel_file.xlsx")
sheet_xts <- xts(xl_sheet[-1], order.by = as.Date(xl_sheet$date))

Обратите внимание, что мой столбец даты был первым столбцом, поэтому xl_sheet [-1] удалил первый столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...