首页 > 解决方案 > 如何在 R Shiny 应用程序中保持 export_summs 的小数点四舍五入

问题描述

我正在lm()使用用户输入生成带有 Shiny 应用程序的线性回归模型 ( )。我想用export_summs()from报告模型jtools(如果您没有使用它,这是一个很好的工具! - 也可以查看 plot_summs)。

我的问题是输出表中的小数点不再四舍五入,我无法修复它。

我尝试了这个论点export_summs(number_format = "%.2f"),因为文档提到:

您还可以传递 huxtable::huxreg() 函数接受的任何参数。

然而,这并没有改变什么。我还尝试用 对数字列进行四舍五入sprintf,这也没有改变任何东西。

第二个问题,列标题“模型 1”也重复了 2 行。

例子

library(shiny)
library(shinydashboard)
library(dplyr)
library(jtools)

ui <- dashboardPage(
    dashboardHeader(),
    dashboardSidebar(
        width = 350
    ),
    dashboardBody(
        tableOutput("export_summ")
    )

)

server <- function(input, output, session) {

    output$export_summ <- renderTable({
        lm(Sepal.Length ~ Species, data = iris) %>%
            export_summs(number_format = "%.2f") %>%
            mutate_if(is.numeric, list(~sprintf("%.2f", .)))
    })

}

shinyApp(ui, server)

预期输出(根据控制台输出)

─────────────────────────────────────────────────
                                 Model 1         
                        ─────────────────────────
  (Intercept)                          5.01 ***  
                                      (0.07)     
  Speciesversicolor                    0.93 ***  
                                      (0.10)     
  Speciesvirginica                     1.58 ***  
                                      (0.10)     
                        ─────────────────────────
  N                                  150         
  R2                                   0.62      
─────────────────────────────────────────────────
  *** p < 0.001; ** p < 0.01; * p < 0.05.        

Column names: names, Model 1

实际输出

names               Model 1
                    Model 1
(Intercept)         5.006 ***
                    (0.0728022201948961)
Speciesversicolor   0.930000000000001 ***
                    (0.102957887170494)
Speciesvirginica    1.582 ***
                    (0.102957887170494)
N                   150
R2                  0.618705730738487
** p < 0.001; * p < 0.01; p < 0.05. 

标签: rshiny

解决方案


我猜 Shiny 无法处理由 huxtable-library 创建的对象类。我建议使用renderUI()然后huxtable::to_html()将其显示为常规 html 代码。

library(shiny)
library(shinydashboard)
library(dplyr)
library(jtools)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    width = 350
  ),
  dashboardBody(
    uiOutput("export_summ")
  )
)

server <- function(input, output, session) {
  output$export_summ <- renderUI({
    data<-lm(Sepal.Length ~ Species, data = iris) %>%
      export_summs(number_format = "%.2f") 
     HTML(huxtable::to_html(data))
   })
}

shinyApp(ui, server)

对我来说,它看起来像这样: 在此处输入图像描述


推荐阅读