Как обрабатывать дефисы в тикерах Yahoo Finance в Quantmod

При выполнении следующих команд дефис в бегущей строке HM-B.ST интерпретируется как знак минус. Я попытался переименовать объект xts во что-то другое, но безуспешно. Кто-нибудь знает решение для этого?

>library(quantmod)
>getSymbols("HM-B.ST")
>chartSeries(HM-B.ST)
Error in inherits(x, "xts") : object 'HM' not found

person johansson.lc    schedule 12.10.2013    source источник
comment
Закрытие этого как дубликата аналогичного вопроса, заданного несколькими месяцами ранее.   -  person Joshua Ulrich    schedule 05.01.2015


Ответы (1)


Самый простой способ справиться с этим — не полагаться на поведение автоматического назначения по умолчанию getSymbols(), а вместо этого назначить объекту временного ряда более стандартное имя по вашему выбору. Например:

HM.B.ST <- getSymbols("HM-B.ST", auto.assign=FALSE) # h.t. Joshua Ulrich
chartSeries(HM.B.ST)

Если по какой-то причине вы действительно хотите, чтобы временной ряд сохранил свое имя по умолчанию с дефисом, вы можете получить к нему доступ, выполнив следующие действия:

chartSeries(`HM-B.ST`)

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

Чтобы понять это раз и навсегда, попробуйте что-то вроде следующего:

assign("a really stupidly constructed name!*&^", 5)
`a really stupidly constructed name!*&^`
# [1] 5
person Josh O'Brien    schedule 12.10.2013
comment
Удивительный ответ. Большое спасибо! - person johansson.lc; 13.10.2013
comment
@johansson.lc, вы также можете использовать get. например chartSeries(get("HM-B.ST"))... или, для лучшего названия диаграммы: s <- "HM-B.ST"; chartSeries(get(s), name=s) - person GSee; 13.10.2013
comment
@GSee большое спасибо, это тоже сработало. - person johansson.lc; 14.10.2013