2012-11-12 3 views
2

Моя версия R 2.15.1 Я следую примеру исследования «Предсказание возврата фондового рынка» Луиса Торго. Когда я пытаюсь импортировать набор данных из файла CSV или из Интернета как методы не срабатывают сxts ошибка - помогите объяснить поведение, пожалуйста

Error in as.POSIXlt.character(x, tz, ...) : 
    character string is not in a standard unambiguous format 

Я иду на использование имеющегося файла .rdata. Однако, та же ошибка, я получаю, когда я пытаюсь запустить функцию T.ind

> 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 
+ } 

Итак, я вручную выполняется каждую команду, строка за строкой, заменяющего параметры с соответствующими значениями и проследили вниз ошибку на линии:

>xts(x,time(GSPC)) #'quote' replaced with 'GSPC' 
Error in as.POSIXlt.character(x, tz, ...) : 
    character string is not in a standard unambiguous format 

Удивительно, но после многих проб и ошибок, я обнаружил, что удаление 2 строк делает его работы!:

> GSPC_new<-GSPC[-c(1073,1325),] 
> x_new<-x[-c(1073,1325)] 
> xts_obj<-xts(x_new,time(GSPC_new)) 

ли кто ранее сталкивался с этим явлением? Что может быть объяснением этого? Спасибо, что прочитали время и, возможно, ответили на это!

ответ

3

Ошибка возникает от as.POSIXlt.character, который является методом, называемым, когда символьные данные принуждаются к объекту POSIXlt (то есть к тому, что R может понимать как время даты, а не просто строку).

Что это означает, что ваш вектор данных DateTime не записывается в формате, который распознается как стандартный формат даты и времени:

else if (all(!is.na(strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y/%m/%d %H:%M:%OS", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y-%m-%d %H:%M", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y/%m/%d %H:%M", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y-%m-%d", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y/%m/%d", 
    tz = tz)))) { 

Однако единственный тест, который применяется является для проверки NA и IIRC там являются другими способами, в которых NA s могут произойти в POSIXlt данных. Наиболее вероятным виновником является дата и время, которое не существует в часовом поясе, в котором работает ваш или ваш компьютер. Думайте о летнем времени и т. Д. Или датах, которые никогда не существовали для различных капризов системы, которые являются календарями и временами.

Вы определили строки, которые являются неправильными или являются причиной проблемы. Идите и посмотрите, как выглядят эти данные. Являются ли они в правильном формате? Если да, укажите дату/время для вашего часового пояса? Возможно, вам придется немного проверить это самостоятельно, где бы вы ни рассчитывали, что он работает.

+1

Спасибо, Гэвин, вы были правы, проблема была в часовом поясе. Мой часовой пояс был _'CST'_. После перехода на _'GMT'_ он работал без удаления 2 строк. Строки, вызывающие проблему, содержат эти даты: _'1974-04-01'_ и _'1975-04-01'_. Почему эти две даты могут вызвать проблему в _'CST'_, но не в формате _GMT'_? –

+0

http://www.horlogeparlante.com/history.html?city=1668341 указывает на изменение летних смен на эти две даты. Это лишь половина объяснений, но я думаю, это связано. –

+0

Спасибо за ссылку, Даррен! –

Смежные вопросы