2017-08-22 173 views
0

我想根据用户通过文件输入的数据显示图表(对于Shiny应用程序)。使用当前的设置,有一个错误消息声称没有找到数据,所以图(从rCharts包)不显示。输入文件后显示R闪亮图

代码下面附:

ui.R

library(rCharts) 
library(shinydashboard) 
library(shiny) 
dashboardPage(
    skin = "black", 
    header <- dashboardHeader(
    titleWidth = 475 
), 
    sidebar <- dashboardSidebar(
    sidebarMenu(
    )  
), 
    body <- dashboardBody(
    tabItems(
     tabItem("setup", 
       box(width = 4,title = tags$b('Input Dataset'), solidHeader = T, status = 'primary', collapsible = T, 
        helpText("Default max. file size is 5 MB. Please upload both files for analysis in csv format."), 
        fileInput("file1","Upload the first file"), 
        fileInput("file2","Upload the second file") 
      ),     
       box(height = 500, width = 12,title = tags$b('Visualize Data'), solidHeader = T, status = 'primary', 
        showOutput("myPlot", "Highcharts")     
      ) 
    ) 
    ) 
) 
) 

server.R

library(shiny) 
library(rCharts) 
# Define server logic required to draw a histogram 
shinyServer(function(input, output) { 
    observe({ 
    file1 = input$file1 
    file2 = input$file2 
    if (is.null(file1) || is.null(file2)) { 
     return(NULL) 
    } 
    data1 = read.csv(file1$datapath) 
    data2 = read.csv(file2$datapath) 
    }) 
    output$myPlot<-renderChart2({ 
    # Prepare data 

    data1[,2] <- (data1[,2])/sum(data1[,2]) 

    # Create chart 
    a <- rCharts:::Highcharts$new() 
    a$chart(type = "column") 
    a$xAxis(categories = rownames(x)) 
    a$yAxis(title = list(text = "Normalized Intensity")) 
    a$data(data1) 
    a$set(width = 600, height = 500) 
    return(a) 
    }) 
}) 

回答

0

尝试增加这样的事情。请确保您检查nrow并返回并清空Highcharts$new()对象为renderChart2需要一个。

library(shiny) 
library(rCharts) 
# Define server logic required to draw a histogram 
shinyServer(function(input, output) { 

    data1 <- reactive({read.csv(file1$datapath)}) 
    data2 <- reactive({read.csv(file2$datapath)}) 

    output$myPlot<-renderChart2({ 
    data1 <- data1() 
    # Prepare data 
    if(nrow(data1==0)){return(Highcharts$new())} 
    data1[,2] <- (data1[,2])/sum(data1[,2]) 

    # Create chart 
    a <- rCharts:::Highcharts$new() 
    a$chart(type = "column") 
    a$xAxis(categories = rownames(x)) 
    a$yAxis(title = list(text = "Normalized Intensity")) 
    a$data(data1) 
    a$set(width = 600, height = 500) 
    return(a) 
    }) 
}) 
+0

即使进行此修改,我仍然会收到“找不到对象'file1'。”我错过了什么吗? – user2657817