2014-11-19 4 views
1

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

table.AnnualizedReturns(indOver, Rf=0) 

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

Так что первый один 0,0732 я хотел бы видеть, как 0,07%

+0

Любая вероятность воспроизводимого примера? Если таблица такая простая, может быть достаточно легко получить сами значения и форматировать таблицу самостоятельно. – Spacedman

ответ

3

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

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

> 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" 

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

+0

WOW это блестяще благодаря мельнице – Mickson

+0

Еще один вопрос: у меня есть 3 столбца в моем фрейме данных, настраивая ваш код, как это я до сих пор не достиг цели на всех 3 столбцах только 1-й: class (tb [, 1: 3 ]) = "pc" – Mickson

+0

Loop it 'for (i in 1: ncol (tb)) {class (tb [, i]) =" pc "}' – Spacedman

2

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

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

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

+0

спасибо, когда я делаю это 'sprintf ('% 0.2f %% ', indOver [1,3])' Я могу получить 1 из чисел, чтобы превратиться в%, но, похоже, только 1 номер не другой числа в кадре данных. – Mickson

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