[英]Ηow can I get the filename of a file uploaded with a shiny fileInput?
我有下面的 shiny 应用程序,用户在其中登陆Upload data
面板。 如果他没有上传Upload data
选项卡中需要的两个文件,我希望用户不能移动到其他 2 tabpanels
中的任何一个。 这里的问题是,我希望仅当 csv 名称是特定的时才激活两个选项卡。 例如,在第一个或第二个fileInput()
中导入的 csv 应命名为csvone
,在第一个或第二个 fileInput() 中导入的 csv 应命名为csvtwo
。 但是无论哪个是第一个,都应该上传两个文件。
library(shiny)
library(shinyjs)
jscode <- "
shinyjs.disableTab = function(name) {
var tab = $('.nav li a[data-value=' + name + ']');
tab.bind('click.tab', function(e) {
e.preventDefault();
return false;
});
tab.addClass('disabled');
}
shinyjs.enableTab = function(name) {
var tab = $('.nav li a[data-value=' + name + ']');
tab.unbind('click.tab');
tab.removeClass('disabled');
}
"
css <- "
.nav li a.disabled {
background-color: #aaa !important;
color: #333 !important;
cursor: not-allowed !important;
border-color: #aaa !important;
}"
#ui.r
ui <- fluidPage(
useShinyjs(),
extendShinyjs(text = jscode, functions = c("disableTab","enableTab")),
inlineCSS(css),
# App title ----
titlePanel("Tabsets"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
),
# Main panel for displaying outputs ----
mainPanel(
tabsetPanel( id="tabset",
tabPanel("Upload data", value="tab0",
fileInput("file1", "Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")),
fileInput("file2", "Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv"))),
tabPanel("Resource Allocation", value="tab1"),
tabPanel("Time Series", value="tab2")
)
)
)
)
#server.r
server = function(input, output) {
print("test")
js$disableTab("tab1")
js$disableTab("tab2")
observe({
req(input$file1, input$file2)
js$enableTab("tab1")
js$enableTab("tab2")
})
}
shinyApp(ui, server)
只需将启用命令包装在 if/else 语句中,就像这样
顺便说一句:您(应该)问的基本上是“我怎样才能获得使用 shiny fileInput
上传的文件的文件名?”
library(shiny)
library(shinyjs)
jscode <- "
shinyjs.disableTab = function(name) {
var tab = $('.nav li a[data-value=' + name + ']');
tab.bind('click.tab', function(e) {
e.preventDefault();
return false;
});
tab.addClass('disabled');
}
shinyjs.enableTab = function(name) {
var tab = $('.nav li a[data-value=' + name + ']');
tab.unbind('click.tab');
tab.removeClass('disabled');
}
"
css <- "
.nav li a.disabled {
background-color: #aaa !important;
color: #333 !important;
cursor: not-allowed !important;
border-color: #aaa !important;
}"
#ui.r
ui <- fluidPage(
useShinyjs(),
extendShinyjs(text = jscode, functions = c("disableTab","enableTab")),
inlineCSS(css),
# App title ----
titlePanel("Tabsets"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
),
# Main panel for displaying outputs ----
mainPanel(
tabsetPanel( id="tabset",
tabPanel("Upload data", value="tab0",
fileInput("file1", "Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")),
fileInput("file2", "Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv"))),
tabPanel("Resource Allocation", value="tab1"),
tabPanel("Time Series", value="tab2")
)
)
)
)
#server.r
server = function(input, output) {
js$disableTab("tab1")
js$disableTab("tab2")
observe({
req(input$file1, input$file2)
if(input$file1$name == "csvone.csv" && input$file2$name == "csvtwo.csv"){
js$enableTab("tab1")
js$enableTab("tab2")
}
})
}
shinyApp(ui, server)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.