来自输出的闪亮复选框动态值 (Server.r)
Shiny Check box dynamic values from output (Server.r)
编辑:完整代码
数据文件:https://drive.google.com/file/d/0B_sB3ef_9RntOWJjNlhrUjk3a1k/view
不确定如何在 Whosebug 中共享数据文件。所以在Google驱动器中给了一个附件。如果有其他选择,请告诉我。
我无法根据输入的 csv 数据在 Shiny App 中创建动态复选框过滤器。我需要用户输入数据文件 (.csv) 并使用该文件中的 "Country" 列作为复选框过滤器出现在 UI 中。但是,我收到错误。
这是我的代码。我尝试了不同的方法但没有用。请帮忙!
Server.R
library(shiny)
shinyServer(function(input, output) {
data_attr <- reactive({
file1 <- input$file_attr
if(is.null(file1)){return()}
list(read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors))
})
countries <- reactive({
if(is.null(data_attr()$Country)){return()}
data_attr()$Country
})
output$CountryList <- renderUI({
if(is.null(data_attr()$Country)){return()}
checkboxGroupInput('show_vars', 'Country Filter',
as.list(countries))
})
})
UI.R
library(shiny)
shinyUI(fluidPage(
navbarPage(
"Tab_name",
tabPanel("Engine",
bootstrapPage(
div(style="display:inline-block", fileInput("file_attr", "attributes:")),
uiOutput("CountryList")
)
)
)
))
错误:
Listening on http://127.0.0.1:4017
Warning: Error in !: invalid argument type
Stack trace (innermost first):
92: read.table
91: <reactive:data_attr> [C:\Users\userName\Documents\dummt/server.R#8]
80: data_attr
79: renderUI [C:\Users\userName\Documents\dummt/server.R#18]
78: func
77: origRenderFunc
76: output$CountryList
1: runApp
您收到的错误是因为您的读取 .table read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)
有 input$sep
、input$header
和 input$stringAsFactors
未定义 UI 输入元素,因此值为 NULL。现在我已经为那些给出了硬编码值。如果以后需要,可以定义 UI 元素。
除此之外,我还修改了您的代码,以便您获得所需的输出。我为 input$file_attr
添加了一个 observeEvent,以便在您上传文件后触发渲染 UI。
server <- shinyServer(function(input, output) {
data_attr <- reactive({
file1 <- input$file_attr
if(is.null(file1)){return()}
read.table(file=file1$datapath, sep=",",, header = TRUE, stringsAsFactors = FALSE)
})
countries <- reactive({
if(is.null(data_attr()$Country)){return()}
data_attr()$Country
})
observeEvent(input$file_attr, {
output$CountryList <- renderUI({
if(is.null(data_attr()$Country)){return()}
checkboxGroupInput('show_vars', 'Country Filter',
countries())
})
})
})
希望对您有所帮助!
编辑:完整代码
数据文件:https://drive.google.com/file/d/0B_sB3ef_9RntOWJjNlhrUjk3a1k/view 不确定如何在 Whosebug 中共享数据文件。所以在Google驱动器中给了一个附件。如果有其他选择,请告诉我。
我无法根据输入的 csv 数据在 Shiny App 中创建动态复选框过滤器。我需要用户输入数据文件 (.csv) 并使用该文件中的 "Country" 列作为复选框过滤器出现在 UI 中。但是,我收到错误。
这是我的代码。我尝试了不同的方法但没有用。请帮忙!
Server.R
library(shiny)
shinyServer(function(input, output) {
data_attr <- reactive({
file1 <- input$file_attr
if(is.null(file1)){return()}
list(read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors))
})
countries <- reactive({
if(is.null(data_attr()$Country)){return()}
data_attr()$Country
})
output$CountryList <- renderUI({
if(is.null(data_attr()$Country)){return()}
checkboxGroupInput('show_vars', 'Country Filter',
as.list(countries))
})
})
UI.R
library(shiny)
shinyUI(fluidPage(
navbarPage(
"Tab_name",
tabPanel("Engine",
bootstrapPage(
div(style="display:inline-block", fileInput("file_attr", "attributes:")),
uiOutput("CountryList")
)
)
)
))
错误:
Listening on http://127.0.0.1:4017
Warning: Error in !: invalid argument type
Stack trace (innermost first):
92: read.table
91: <reactive:data_attr> [C:\Users\userName\Documents\dummt/server.R#8]
80: data_attr
79: renderUI [C:\Users\userName\Documents\dummt/server.R#18]
78: func
77: origRenderFunc
76: output$CountryList
1: runApp
您收到的错误是因为您的读取 .table read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)
有 input$sep
、input$header
和 input$stringAsFactors
未定义 UI 输入元素,因此值为 NULL。现在我已经为那些给出了硬编码值。如果以后需要,可以定义 UI 元素。
除此之外,我还修改了您的代码,以便您获得所需的输出。我为 input$file_attr
添加了一个 observeEvent,以便在您上传文件后触发渲染 UI。
server <- shinyServer(function(input, output) {
data_attr <- reactive({
file1 <- input$file_attr
if(is.null(file1)){return()}
read.table(file=file1$datapath, sep=",",, header = TRUE, stringsAsFactors = FALSE)
})
countries <- reactive({
if(is.null(data_attr()$Country)){return()}
data_attr()$Country
})
observeEvent(input$file_attr, {
output$CountryList <- renderUI({
if(is.null(data_attr()$Country)){return()}
checkboxGroupInput('show_vars', 'Country Filter',
countries())
})
})
})
希望对您有所帮助!