Автоматическое масштабирование чисел в таблице с помощью звездочета

Я хочу создать ряд таблиц с числовыми элементами очень разных масштабов. Например, таблицы с дисперсией различных переменных по диагонали и корреляциями по диагонали. Большие числа делают таблицы слишком большими и их труднее читать.

Есть ли хороший способ использовать stargazer (или какой-либо другой подобный пакет) для уменьшения элементов, которые намного больше, и указать это сноской или автоматически использовать экспоненциальную запись?

Например, следующий код r создает матрицу, в которой диагональные элементы намного больше, чем другие элементы.

x <- matrix(rnorm(25,0,1),5,5)
diag(x) <- rnorm(5,10000000,10)
stargazer(x,summary=F,digits=2)

Любая помощь высоко ценится.


person Misophist    schedule 05.06.2015    source источник


Ответы (1)


Может быть, вы можете сделать некоторую адаптацию этого:

ifelse(x < 100, sprintf("%0.2f", x), sprintf("%0.5e", x))
#    [,1]          [,2]          [,3]          [,4]          [,5]         
#[1,] "9.99999e+06" "-0.79"       "-0.56"       "0.91"        "-2.57"      
#[2,] "-0.13"       "9.99999e+06" "-1.83"       "-0.34"       "1.73"       
#[3,] "-0.48"       "0.38"        "1.00000e+07" "1.40"        "-0.32"      
#[4,] "-0.05"       "-0.62"       "0.91"        "1.00000e+07" "1.15"       
#[5,] "-0.09"       "-0.33"       "-0.16"       "0.35"        "9.99999e+06"

Или без кавычек:

noquote(ifelse(x < 100, sprintf("%0.2f", x), sprintf("%0.5e", x)))
#     [,1]        [,2]        [,3]        [,4]        [,5]       
#[1,] 9.99999e+06 -0.79       -0.56       0.91        -2.57      
#[2,] -0.13       9.99999e+06 -1.83       -0.34       1.73       
#[3,] -0.48       0.38        1.00000e+07 1.40        -0.32      
#[4,] -0.05       -0.62       0.91        1.00000e+07 1.15       
#[5,] -0.09       -0.33       -0.16       0.35        9.99999e+06

По сути, вы конвертируете в текст для печати желаемым способом. Дополнительные сведения о параметрах вывода см. в разделе ?sprintf.

person Marc in the box    schedule 05.06.2015