我正在使用R Shiny制作应用程序。我把这个命令放在程序的顶部:
options(shiny.maxRequestSize=-1)
显然,此命令允许用户上传任何文件大小(默认值为5 MB限制)。 我也试过了:
options(shiny.maxRequestSize=30*1024^2)
我认为是30 MB的限制。
但是,每当我尝试上传大于5 MB的文件时,R都会崩溃,并且在尝试加载文件后大约一分钟我收到“R遇到致命错误”消息。
编辑:进一步测试显示我输出的gVis表导致崩溃。为什么会这样?
我的代码适用于5 MB以下的任何文件。
一些代码:
ui.R
dataset <- list('Upload a file'=c(1))
shinyUI(pageWithSidebar(
sidebarPanel(
fileInput('file', 'Data file'),
radioButtons('format', 'Format', c('CSV', 'TSV')),
conditionalPanel(condition = "input.tsp == 'sort'",
checkboxInput(inputId = "pageable", label = "Make table pageable"),
conditionalPanel("input.pageable==true",
numericInput(inputId = "pagesize",
label = "Entries per page",10))
),
conditionalPanel(condition = "input.tsp == 'multi' ",
selectInput('x', 'X', names(dataset)),
selectInput('y', 'Y', names(dataset), multiple=T),
selectInput('color', 'Color', c('None', names(dataset))),
checkboxInput('jitter', 'Jitter'),
checkboxInput('smooth', 'Smooth'),
selectInput('facet_row', 'Facet Row', c(None='.', names(dataset))),
selectInput('facet_col', 'Facet Column', c(None='.', names(dataset)))
)
),
mainPanel(
tabsetPanel(
tabPanel("Sortable Table", htmlOutput("gvisTable"),value="sort"),
tabPanel("Multiplot", plotOutput('plotMulti'), value="multi"),
id="tsp" #id of tab
)
)
))
server.R
library(reshape2)
library(googleVis)
library(ggplot2)
options(shiny.maxRequestSize=-1)
shinyServer(function(input, output, session) {
#-----------------------------------------------------------
# Dataview Tab Inputs
#-----------------------------------------------------------
data <- reactive({
if (is.null(input$file))
return(NULL)
else if (identical(input$format, 'CSV'))
return(read.csv(input$file$datapath))
else
return(read.delim(input$file$datapath))
})
observe({
df <- data()
str(names(df))
if (!is.null(df)) {
updateSelectInput(session, 'x', choices = names(df))
updateSelectInput(session, 'y', choices = names(df))
updateSelectInput(session, 'color', choices = c('None', names(df)))
updateSelectInput(session, 'facet_row', choices = c(None='.', names(df)))
updateSelectInput(session, 'facet_col', choices = c(None='.', names(df)))
}
})
myOptions <- reactive({
list(
page=ifelse(input$pageable==TRUE,'enable','disable'),
pageSize=input$pagesize,
width=1000
)
})
output$gvisTable <- renderGvis( {
if (is.null(data()))
return(NULL)
gvisTable(data(), options=myOptions())
})
#-----------------------------------------------------------
# Graphs
#-----------------------------------------------------------
output$plotMulti <- renderPlot({
if (is.null(data()))
return(NULL)
temp <- input$x
p <- ggplot(data(), aes_string(x=temp, y=input$y), environment = environment())
p <- p + geom_bar()
if (input$smooth)
p <- p + geom_smooth()
if (input$color != 'None')
p <- p + aes_string(color=input$color)
facets <- paste(input$facet_row, '~', input$facet_col)
if (facets != '. ~ .')
p <- p + facet_grid(facets)
if (input$jitter)
p <- p + geom_jitter()
multiplot(p, p)
})
})