R Shiny: 渲染 summary.ivreg 输出

3
我将尝试在R Shiny中呈现一个工具变量回归摘要。
下面是代码:
iv=ivreg(lwage~educ+exper|nearc4+exper)
summary(iv)

当我使用renderTable时,出现以下错误:'xtable'方法不适用于"class summary.ivreg"的对象。
有什么建议来解决这个问题吗?
这是我的网站,如果您想看看我正在做什么:https://ieconometrics.shinyapps.io/test/
1个回答

3

renderTable期望提供一个存在xtable方法的对象,您可以使用以下代码查看可用的方法:methods(xtable)。它不适用于summary.ivreg,您可以自己构建一个方法或使用下面的代码获得类似的结果:

enter image description here

library(shiny)
library(AER)
library(ReporteRs)

# define server
server <- function(input, output) {

  output$raw_summary <- renderPrint({
    fm <- ivreg(log(packs) ~ log(rprice) + log(rincome) | log(rincome) + tdiff + I(tax/cpi),
                data = CigarettesSW, subset = year == "1995")
    print(summary(fm))
  })

  output$summary_table <- renderUI({
    fm <- ivreg(log(packs) ~ log(rprice) + log(rincome) | log(rincome) + tdiff + I(tax/cpi),
    data = CigarettesSW, subset = year == "1995")
    data = summary(fm)$coefficients
    data = as.data.frame(data)
    # get signif codes
    signif.codes = cut( data[,4]
                    , breaks = c( -Inf, 0.001, 0.01, 0.05, Inf)
                    , labels= c("***", "**", "*", "" ) )

    # format the data values
    data[, 1] = formatC( data[, 1], digits=3, format = "f")
    data[, 2] = formatC( data[, 2], digits=3, format = "f")
    data[, 3] = formatC( data[, 3], digits=3, format = "f")
    data[, 4] = ifelse( data[, 4] < 0.001, "< 0.001", formatC( data[, 4], digits=5, format = "f"))
    # add signif codes to data
    data$Signif = signif.codes

    # create an empty FlexTable
    coef_ft = FlexTable( data = data, add.rownames=TRUE
                     , body.par.props = parRight(), header.text.props = textBold()
                     , header.columns = T
    )
    # center the first column and set text as bold italic
    coef_ft[,1] = parCenter()
    coef_ft[,1] = textBoldItalic()

    # define borders
    coef_ft = setFlexTableBorders( coef_ft
                               , inner.vertical = borderNone(), inner.horizontal = borderDotted()
                               , outer.vertical = borderNone(), outer.horizontal = borderSolid()
    )
    return(HTML(as.html(coef_ft)))
  })
}

# define ui
ui <- shinyUI(fluidPage(
  p("Raw summary"),
  verbatimTextOutput(outputId = "raw_summary"),

  p("Pretty model summary table :"),
  uiOutput(outputId = "summary_table")
))

# Call the app
shinyApp(ui = ui, server = server)

谢谢Victorp,这太棒了!我还发现了stargazer(),它可以给我一个输出,我可以用renderUI来渲染。你的代码确实给了我更多改变输出的选项。 - Mahdi Moqri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接