Числа PerformanceAnalytics в процентах %

Я хочу знать, можно ли сделать вывод таблицы в этом пакете R% вместо числового.

table.AnnualizedReturns(indOver, Rf=0)

                          SP500  
Annualized Return         0.0732
Annualized Std Dev        0.1951
Annualized Sharpe (Rf=0%) 0.3752

Итак, 1-й 0,0732 я хотел бы видеть как 0,07%


person Mickson    schedule 19.11.2014    source источник
comment
Есть ли шанс воспроизводимого примера? Если таблица настолько проста, может быть достаточно просто получить сами значения и отформатировать таблицу самостоятельно.   -  person Spacedman    schedule 19.11.2014


Ответы (2)


Возвращаемое значение этой функции представляет собой фрейм данных, поэтому вопрос заключается в том, как сделать так, чтобы столбец фрейма данных печатался со знаком процента.

Далее следует воспроизводимый пример.

> require(PerformanceAnalytics)
> data(managers)
> tb =      table.AnnualizedReturns(managers[,1],Rf=0)
> tb
                            HAM1
Annualized Return         0.1375
Annualized Std Dev        0.0888
Annualized Sharpe (Rf=0%) 1.5491

Теперь мы определяем новый класс и функцию формата, которая отображается со знаком процента:

> format.pc = function(x,...){sprintf('%0.2f%%',x)}
> class(tb[,1])="pc"

А теперь как по волшебству:

> tb
                           HAM1
Annualized Return         0.14%
Annualized Std Dev        0.09%
Annualized Sharpe (Rf=0%) 1.55%

Базовые значения не изменились:

> tb[,1]
[1] 0.1375 0.0888 1.5491
attr(,"class")
[1] "pc"

они просто находятся в векторе этого нового класса.

person Spacedman    schedule 19.11.2014
comment
Еще один вопрос: у меня есть 3 столбца в моем фрейме данных, изменив ваш код следующим образом. Я все еще не достигаю цели во всех 3 столбцах, только 1-й: class(tb[,1:3])=pc - person Mickson; 19.11.2014
comment
Зациклить for(i in 1:ncol(tb)){class(tb[,i])="pc"} - person Spacedman; 19.11.2014
comment
Вероятно, вам следует поставить маленькую галочку, чтобы отметить этот вопрос как отвеченный... та. - person Spacedman; 19.11.2014

Один из способов правильного форматирования строки:

sprintf('%0.2f%%', 0.0567)    # Note I use %% to get a percent sign in the output
[1] "0.06%"

Заставить это работать в table.AnnualizedReturns будет означать редактирование кода. Вы можете сделать копию и отредактировать код в соответствии с вашими пожеланиями. Кроме того, вы можете связаться с автором пакета, содержащего эту функцию, и предложить изменение.

person Paul Hiemstra    schedule 19.11.2014
comment
спасибо, когда я делаю это 'sprintf('%0.2f%%',indOver[1,3])', я могу превратить 1 из чисел в %, но, похоже, разрешается только 1 число, а не другие числа во фрейме данных. - person Mickson; 19.11.2014