在Shiny app中上传文件,读取数据,命名变量(列)并在显示绘图输出之前进行一些数据分析
我使用Shiny gallery的这款应用作为参考:enter link description here
我想在进行不同的分析后在许多输出中使用上传的数据。因此,我不是在renderTable
或renderPlot
内阅读文件,而是在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*
函数之前进行一些分析?
答案 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这样的适当回调框架。)