在 Shiny R 中上传文件前显示数据
Display data before file upload in Shiny R
我正在创建一个简单的 Shiny 应用程序,允许用户上传 csv 文件并使用上传的数据绘制各种图表。我想将一些数据预加载到应用程序中,以便没有任何数据的用户仍然可以绘制图形。
现在我只是尝试打印上传文件或示例数据的 table。
我编写了以下代码,但它不起作用:
server.R
library(shiny)
library(ggplot2)
shinyServer(function(input, output) {
output$contents <- reactive({
inFile <- input$file1
if (!is.null(inFile)){
renderTable({
read.csv(inFile$datapath, header=input$header, sep=input$sep,
quote=input$quote)})
}
else{
renderDataTable({
diamonds[, input$show_vars, drop = FALSE]})
}
})
})
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Test"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept = c(
'.csv',
'.tsv'
)
),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
','),
radioButtons('quote', 'Quote',
c(None='',
'Double Quote'='"',
'Single Quote'="'"),
'"')
),
mainPanel(
tabsetPanel(type = "tabs",
tabPanel("Table", tableOutput("contents"))
)
)
)
))
我猜我没有正确分配给 output$contents,但我真的不知道如何修复它。
您不能从 reactive()
内部调用 renderTable
或 renderDataTable
。换成这样:
shinyServer(function(input, output) {
tableData <- reactive({
inFile <- input$file1
if (!is.null(inFile)){
read.csv(inFile$datapath, header=input$header, sep=input$sep,
quote=input$quote)
}
else {
diamonds[, input$show_vars, drop = FALSE]
}
})
output$contents <- renderTable({
tableData()
})
})
我正在创建一个简单的 Shiny 应用程序,允许用户上传 csv 文件并使用上传的数据绘制各种图表。我想将一些数据预加载到应用程序中,以便没有任何数据的用户仍然可以绘制图形。
现在我只是尝试打印上传文件或示例数据的 table。
我编写了以下代码,但它不起作用:
server.R
library(shiny)
library(ggplot2)
shinyServer(function(input, output) {
output$contents <- reactive({
inFile <- input$file1
if (!is.null(inFile)){
renderTable({
read.csv(inFile$datapath, header=input$header, sep=input$sep,
quote=input$quote)})
}
else{
renderDataTable({
diamonds[, input$show_vars, drop = FALSE]})
}
})
})
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Test"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept = c(
'.csv',
'.tsv'
)
),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
','),
radioButtons('quote', 'Quote',
c(None='',
'Double Quote'='"',
'Single Quote'="'"),
'"')
),
mainPanel(
tabsetPanel(type = "tabs",
tabPanel("Table", tableOutput("contents"))
)
)
)
))
我猜我没有正确分配给 output$contents,但我真的不知道如何修复它。
您不能从 reactive()
内部调用 renderTable
或 renderDataTable
。换成这样:
shinyServer(function(input, output) {
tableData <- reactive({
inFile <- input$file1
if (!is.null(inFile)){
read.csv(inFile$datapath, header=input$header, sep=input$sep,
quote=input$quote)
}
else {
diamonds[, input$show_vars, drop = FALSE]
}
})
output$contents <- renderTable({
tableData()
})
})