我正在尝试创建我的第一个Shiny R应用程序,它执行两项操作:
要实现这些功能,我需要合并两个示例file upload
和row selection
,其中包括将renderTable
切换为renderDataTable
。但是,我只能使用renderDataTable
显示数据,但无法将callback
和options
之类的参数传递给它。
shinyServer(function(input, output) {
output$contents <- renderDataTable({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
subset(read.csv(inFile$datapath, header=input$header, sep=input$sep, quote=input$quote), select=input$show_vars)
})
})
如果我在这种情况下更改了上述功能(如下),我收到了以下错误server.R:9:5: unexpected 'if'
。我认为这与构建一个被动文件上传应用程序有关,我找不到好的例子......有人能给我一些建议吗?谢谢!
shinyServer(function(input, output) {
output$contents <- renderDataTable(
inFile <- input$file1
if (is.null(inFile))
return(NULL)
subset(read.csv(inFile$datapath, header=input$header, sep=input$sep, quote=input$quote), select=input$show_vars),
options = list(pageLength = 10),
callback = "function(table) {
table.on('click.dt', 'tr', function() {
$(this).toggleClass('selected');
Shiny.onInputChange('rows',
table.rows('.selected').indexes().toArray());
});
}"
)
})
答案 0 :(得分:1)
renderDataTable
的第一个参数应该是一个表达式。您需要将代码包装在花括号中,以将第一部分代码作为表达式传递:
shinyServer(function(input, output) {
output$contents <- renderDataTable({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
subset(read.csv(inFile$datapath, header=input$header, sep=input$sep, quote=input$quote), select=input$show_vars)
}
, options = list(pageLength = 10),
, callback = "function(table) {
table.on('click.dt', 'tr', function() {
$(this).toggleClass('selected');
Shiny.onInputChange('rows',
table.rows('.selected').indexes().toArray());
});
}"
)
})