如何上传文件并命名Riny中的列?

时间:2015-07-20 19:04:45

标签: r shiny

目标

在Shiny app中上传文件,读取数据,命名变量(列)并在显示绘图输出之前进行一些数据分析

参考Shiny App

我使用Shiny gallery的这款应用作为参考:enter link description here

我尝试过:

我想在进行不同的分析后在许多输出中使用上传的数据。因此,我不是在renderTablerenderPlot内阅读文件,而是在server函数中阅读:

server <- function(input, output) {
     inFile <- reactive({input$file1})
     sdf <- reactive({read.csv(inFile()$datapath, header=F)})     

colnames(sdf()) <- c('Vehicle.ID', 'Time', 'Vehicle.class.no', 'Vehicle.type2', 
                         'Vehicle.Length', 'Lane', 'Preceding.Vehicle.ID', 'Spacing','Spacing2', 'State',
                         'svel.mps', 'deltaV.mps', 'sacc', 'lane.change')  }

错误

但是当我运行这个应用程序时,我得到了:

  

光泽:: runApp(&#39; APP-CC&#39)

Listening on http://127.0.0.1:7484
Error in colnames(sdf()) <- c("Vehicle.ID", "Time", "Vehicle.class.no",  : 
  invalid (NULL) left side of assignment

问题

如何修复此错误?我不想在每个render*函数中再次读取同一个文件。是否有任何关于闪亮应用的在线示例,其中读取新文件,定义列名,然后在使用render*函数之前进行一些分析?

2 个答案:

答案 0 :(得分:3)

最好在read.csv

期间分配列名
server <- function(input, output) {
     inFile <- reactive({input$file1})
     sdf <- reactive({
         read.csv(inFile()$datapath, header=F, col.names = c('Vehicle.ID', 'Time', 'Vehicle.class.no', 'Vehicle.type2', 
            'Vehicle.Length', 'Lane', 'Preceding.Vehicle.ID', 'Spacing','Spacing2', 'State',
            'svel.mps', 'deltaV.mps', 'sacc', 'lane.change')  
         )
     }) 
}

或者我相信只要你返回最终对象,你就可以在反应块中执行多个操作

server <- function(input, output) {
     inFile <- reactive({input$file1})
     sdf <- reactive({
         dd<-read.csv(inFile()$datapath, header=F)
         colnames(dd) <- c('Vehicle.ID', 'Time', 'Vehicle.class.no', 'Vehicle.type2', 
            'Vehicle.Length', 'Lane', 'Preceding.Vehicle.ID', 'Spacing','Spacing2', 'State',
            'svel.mps', 'deltaV.mps', 'sacc', 'lane.change')  
         )
         dd
     }) 
}

答案 1 :(得分:0)

另一种方法是使用actionButton,然后在上传文件时检查文件的有效性。很多observeEvent可能适合在某些内容被“触发”时触发,就像上传文件或按下按钮一样。另外,为了做出一系列的改变,最好根据标志(我承认,它有点混乱,但是它与Shiny一起工作,因为它没有标志)触发“更新”reactiveValue()有一个像JS这样的适当回调框架。)