r - 如何在闪亮的应用程序中处理正在上传和重命名的文件
问题描述
我在下面有一个简单的闪亮应用程序。在这个应用程序中,我希望用户能够上传自己的 csv,然后自动将其添加为另一个数据集“DB”(我在原始应用程序中创建)下方的复选框组中的选项。然后当用户选择一个文件时,它将显示为一个表格。
在这里,我设法重命名了上传的文件。但是,我不能renderTable()
在保持“更改名称”功能的同时连接重命名的表。
# Define UI for data upload app ----
ui <- fluidPage(
# App title ----
titlePanel("Uploading Files"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Select a file ----
fileInput("file1", "Choose CSV File",
multiple = FALSE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")),
checkboxGroupInput("datasetSelector","Data Files", choices=c("D.B")),
textInput("filename","Set Filename",value = "Set Name")
),
# Main panel for displaying outputs ----
mainPanel(
# Output: Data file ----
tableOutput("contents")
)
)
)
#server.r
server <- function(input, output, session) {
observeEvent(input$filename, {
req(input$file1)
Name<-input$filename
updateCheckboxGroupInput(session,"datasetSelector", choices=c("D.B",Name))
})
observeEvent(input$file1, {
Data<-input$file1$datapath
Name<-input$filename
New <- read.csv(Data)
updateCheckboxGroupInput(session,"datasetSelector",
choices=c("D.B",input$file1$name))
})
D.B <- reactive({
if("D.B"%in% input$datasetSelector){
x <- read.csv("something.csv", stringsAsFactors = F)
}
})
output$contents <- renderTable({
New
})
}
解决方案
这是一种解决方案。
该解决方案使用闪亮输入的能力来获取命名列表。在命名列表中,标签是显示名称,值是返回的内容。例如,c("a" = 1, "b" = 2)
将在 UI 中显示标签a
和,但会在服务器中b
返回值1
和值。2
因为您希望您的标签之一来自输入,所以有必要将有序列表分为两部分。首先是值,然后是标签。例如mylist = c(1,2)
设置值然后names(mylist) = c("a","b")
分配标签。
这是我工作的代码:
library(shiny)
# Define UI for data upload app ----
ui <- fluidPage(
# App title ----
titlePanel("Uploading Files"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Select a file ----
fileInput("file1", "Choose CSV File",
multiple = FALSE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")),
checkboxGroupInput("datasetSelector","Data Files", choices=c("D.B" = "original")),
textInput("filename","Set Filename",value = "Set Name")
),
# Main panel for displaying outputs ----
mainPanel(
# Output: Data file ----
tableOutput("contents")
)
)
)
#server.r
server <- function(input, output, session) {
observeEvent(input$filename, {
req(input$file1)
Name<-input$filename
# make list
choices = c("original", "loaded")
# assign labels to list
names(choices) = c("D.B", Name)
updateCheckboxGroupInput(session,"datasetSelector", choices=choices)
})
observeEvent(input$file1, {
Data<-input$file1$datapath
Name<-input$filename
New <- read.csv(Data)
# make list
choices = c("original", "loaded")
# assign labels to list
names(choices) = c("D.B", Name)
updateCheckboxGroupInput(session,"datasetSelector", choices=choices)
})
D.B <- reactive({
if("D.B"%in% input$datasetSelector){
x <- read.csv("something.csv", stringsAsFactors = F)
}
})
output_table = reactive({
if("original" %in% input$datasetSelector)
return(D.B())
if("loaded" %in% input$datasetSelector)
return(read.csv(input$file1$datapath))
})
output$contents <- renderTable({
output_table()
})
}
# Run the app ----
shinyApp(ui = ui, server = server)
推荐阅读
- csv - Bash - awk 比较未按预期工作
- python - Pandas - 根据其他列因子计数更新列值
- java - Thymeleaf th:field 在表单显示中出现错误
- python - 使用代码向数据库添加信息但得到 {'object':'error', 'status': 400, 'code': 'invalid_json', 'message': 'Error parsing JSON body.'}
- javascript - 使用 php echo 作为变量时,Jquery 出现未捕获的表达式错误
- java - 将递归方法转换为迭代方法
- image-processing - Google Vision 为具有不同图像格式的相同图像提供不一致的结果
- c++ - C ++移动构造函数,删除与省略,当用户定义复制ctor时?
- python - pyav / libav 引发 ImportError
- python - 遍历行并比较两列并应用逻辑并更改熊猫中的一列