Ошибка сегментации при работе со списком объектов XTS в R - PullRequest
3 голосов
/ 10 августа 2011

У меня проблемы с работой со списком объектов xts.Я получаю другое и странное поведение при запуске lapply в элементах списка, а иногда и в программе segfaults.Я использую R 2.12.2 в Ubuntu 9.10, хотя у меня были похожие проблемы с 2.13.1 в Windows XP.

Я пытаюсь разбить фрейм данных, который содержит квартальные финансовые данные, на несколько временных рядов.Я делю фрейм данных на код CIK, который является целым числом.Фрейм данных:

> head(CQ[,c("datadate","fqtr","cik","ibq","mkvaltq","prccq","sic")])
    datadate fqtr    cik     ibq    mkvaltq prccq  sic
3 2009-12-31    1  61478   3.400  601.12800  6.21 3661
4 2010-03-31    2  61478 -13.000  709.07000  7.31 3661
5 2010-06-30    3  61478  75.900  718.77000  7.41 3661
6 2010-09-30    4  61478  10.900 1231.52400 12.67 3661
7 2004-03-31    3 319126   0.424    9.73455  1.05 3861
8 2004-06-30    4 319126   0.407   13.90650  1.50 3861
...

Код, который я использую для создания списка объектов xts:

CQT<-by(CQ[c("datadate","ibq","cik","mkvaltq","prccq","sic","fqtr")],CQ$cik,function(x)
  {
   xts(x,order.by=x$datadate,frequency=4)
  }
)
CQT<-as.list(CQT)

Я не уверен, что строго необходимо преобразовать вlist, но я чувствую себя комфортно со списками.

Это создает следующую структуру данных, которая мне кажется правильной:

> head(CQT)
$`20`
           datadate     ibq     cik  mkvaltq     prccq      sic    fqtr
2004-03-31 "2004-03-31" "1.422" "20" " 53.75880" " 21.8000" "3823" "1" 
2004-06-30 "2004-06-30" "1.389" "20" " 55.04400" " 22.0000" "3823" "2" 
2004-09-30 "2004-09-30" "1.562" "20" " 55.69816" " 22.1200" "3823" "3" 
2004-12-31 "2004-12-31" "2.237" "20" " 67.11840" " 26.5500" "3823" "4" 
2005-03-31 "2005-03-31" "1.643" "20" " 77.28716" " 30.4400" "3823" "1" 
2005-06-30 "2005-06-30" "1.916" "20" " 75.12520" " 29.3000" "3823" "2" 
...

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

lapply(CQT,function(x) {
  lag.xts(x[,"prccq"],1)
  }
)

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

Только этот кодsegfaults иногда.Например, на самой последней итерации, которую я выполнил (для целей публикации), код прекрасно проходит через множество записей.Например:

$`6494`
           prccq  
2004-03-31 NA     
2004-06-30 "0.240"
2004-09-30 "0.150"
2004-12-31 "0.090"
2005-03-31 "0.062"
...

Однако затем будет выдано:

$`6720`

Error in vector(storage.mode(x)) : 
vector: cannot make a vector of mode 'NULL'.

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

> CQT$"6720"
           datadate     ibq        cik    mkvaltq    prccq   sic    fqtr
2004-03-31 "2004-03-31" "  10.740" "6720" "559.8638" "16.03" "3949" "1" 
2004-06-30 "2004-06-30" "   6.178" "6720" "558.6060" "15.70" "3949" "2" 
2004-09-30 "2004-09-30" "  13.198" "6720" "667.6474" "14.31" "3949" "3" 
2004-12-31 "2004-12-31" "   8.825" "6720" "743.1205" "15.88" "3949" "4" 
2005-03-31 "2005-03-31" "   2.324" "6720" "643.6650" "13.75" "3949" "1" 
2005-06-30 "2005-06-30" "   1.453" "6720" "594.0200" "12.68" "3949" "2" 
2005-09-30 "2005-09-30" "  16.740" "6720" "534.5802" "11.40" "3949" "3" 
2005-12-31 "2005-12-31" "-232.078" "6720" "474.1590" "10.11" "3949" "4" 
2006-03-31 "2006-03-31" "   3.642" "6720" "589.5614" "12.55" "3949" "1" 
2006-06-30 "2006-06-30" "   2.143" "6720" "514.9567" "10.94" "3949" "2" 
2006-09-30 "2006-09-30" "  21.518" "6720" "552.9757" "11.73" "3949" "3" 
2006-12-31 "2006-12-31" "  10.385" "6720" "651.7707" "13.19" "3949" "4" 
2007-03-31 "2007-03-31" "   4.767" "6720" "597.7659" "12.09" "3949" "1" 

Я как бы в этом сошел с ума.Я не уверен, что кодирую неправильно (я не смог найти хороших примеров работы со списками объектов xts) или возникла проблема с моим пакетом xts.Я переустановил xts, удалив пакет, а затем переустановив его, используя репозиторий R-Forge, поэтому у меня должна быть самая последняя версия.

Пожалуйста, дайте мне знать, если есть какая-либо дополнительная информация, которую я могу предоставить.

1 Ответ

5 голосов
/ 10 августа 2011

Проблема в том, что код lag C теперь находится в пакете zoo с патчем, примененным к источникам R-forge, но не к версии CRAN.Это было исправлено около недели назад.

Обновите вашу версию zoo (у R-forge номер версии может быть таким же, как и раньше), и вы должны обнаружить, что она работает.

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