Shiny 中的加权 table 输出

Weighted table output in Shiny

我正在尝试创建一个闪亮的应用程序,该应用程序将使用 svytable 为我在数据集中感兴趣的变量生成加权表。但是,我没有得到任何输出,返回错误 "object 'input' not found"。这是复制我的问题的代码。

df <- data.frame(col1 = rnorm(20, 0, 1), col2 = rnorm(20, 2, 2), w = rnorm(20, 1, .2))
df.w <- svydesign(id = ~1, data = df, weights = ~w)

ui <- fluidPage(
        selectInput("v1", "Choose column", colnames(df), selected = "col1"),
        verbatimTextOutput("table")
)
server <- shinyServer(function(input,output){
  output$table <- renderPrint({
    svytable(~input$v1, df.w)
  })
})
shinyApp(ui, server)

您收到此错误是因为 input$v1 是一个字符串,但 svytable 需要一个 formula。您可以使用 as.formula

将字符串转换为公式
library(shiny)
library(survey)

df <- data.frame(col1 = rnorm(20, 0, 1), col2 = rnorm(20, 2, 2), w = rnorm(20, 1, .2))
df.w <- svydesign(id = ~1, data = df, weights = ~w)

ui <- fluidPage(
  selectInput("v1", "Choose column", colnames(df), selected = "col1"),
  verbatimTextOutput("table")
)

server <- function(input, output){
  output$table <- renderPrint({
    myformula <- as.formula(paste0("~", input$v1))
    svytable(myformula, df.w)
  })
}

shinyApp(ui, server)