2013-07-25 2 views
1

Это должно быть очень просто, но я не могу найти решение. Мне нужно сравнить значение объектов«Аргумент имеет длину 0» при сравнении объектов xts

У меня есть 2 xts объекты:

>low2 
low2   daco.Close 
2013-07-24  6.63 

>low3 
low3   daco.Close 
2013-07-24  2.63 

Но когда я пытаюсь что-то вроде этого

if(low2$daco.Close < low3$daco.Close) {...} 

я получаю ошибку

Error in if (low2$daco.Close < low3$daco.Close) { : 
    argument is of length zero 

Даже если при попытке print(low2) или print(low3) Я получаю правильные значения.

Любой совет о том, как его решить, будет очень признателен. Спасибо!

Редактировать: Ниже приведены выходы low2 и low3

> dput(low2) 
structure(6.63, .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", src = "xxx", updated = structure(1374782893.98805, class = c("POSIXct", 
"POSIXt")), class = c("xts", "zoo"), index = structure(1374451200, tzone = "UTC", tclass = "Date"), .Dim = c(1L, 
1L), .Dimnames = list(NULL, "daco.Close")) 
> dput(low3) 
structure(2.63, .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", src = "xxx", updated = structure(1374782893.98805, class = c("POSIXct", 
"POSIXt")), class = c("xts", "zoo"), index = structure(1374624000, tzone = "UTC", tclass = "Date"), .Dim = c(1L, 
1L), .Dimnames = list(NULL, "daco.Close")) 
+1

Те, кто не похож на объекты xts. Пожалуйста, укажите вывод 'dput (low2)' и 'dput (low3)' – GSee

+0

. Это структура вывода (6.63, .indexCLASS = «Дата», tclass = «Дата», .indexTZ = «UTC», tzone = «UTC», src = «xxx», updated = structure (1374782893.98805, class = c («POSIXct», «POSIXt»)), class = c («xts», «zoo»), index = structure (1374624000, tzone = "UTC", tclass = "Date"), .Dim = c (1L, 1L), .Dimnames = list (NULL, "daco.Close")) ' Также возможно это помогает:' low2 = low2 $ daco.Close', и когда я вызываю low2, я получаю вывод, который я опубликовал в вопросе. Благодаря! – JordanBelf

+0

Измените это на свой вопрос, а также предоставите вывод 'dput (low3)'. Основываясь на том, что вы предоставили, я могу сказать только, что он не воспроизводится, потому что 'if (low2 $ daco.Close GSee

ответ

1

XTS объекты выравненные по индексу, прежде чем операции выполняются. Обратите внимание, что low2$daco.Close + low3$daco.Close, вероятно, не вернет то, что вы считали.

Это то, что вы передаете вашему if заявление:

> low2$daco.Close < low3$daco.Close  
    [,1] 
> str(low2$daco.Close < low3$daco.Close) 
An 'xts' object of zero-width 

Вы можете использовать coredata на одном или обоих объектов XTS.

low2$daco.Close < coredata(low3$daco.Close) 
#   daco.Close 
#2013-07-22  FALSE 

или вы могли бы заставить один или оба из них numeric первого

as.numeric(low2$daco.Close) < as.numeric(low3$daco.Close) 
#[1] FALSE 

Если бы они на самом деле имеют одинаковый индекс он должен просто работал.

index(low3) <- index(low2) 
low2$daco.Close < low3$daco.Close 
#   daco.Close 
#2013-07-22  FALSE 
Смежные вопросы