textAreaInput не работает с fileInput

#shiny

#блестящий

Вопрос:

 library(shiny)
ui <- fluidPage(
titlePanel("Uploading Files"),
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose CSV File",multiple = TRUE,accept = c("text/csv","text/comma-        separated-values,text/plain", ".csv")), 
textAreaInput("paste", "Or manufacturer", "Paste one manufacturer per line"),),
mainPanel(tableOutput("contents"))))
 server <- function(input, output) {
output$contents <- renderTable({
 if(!is.null(input$file1))
 {
 req(input$file1)
data <- as.matrix(mpg)
df <- read.delim(input$file1$datapath,header = F)
manufacturer <- unique(df[, 1])
data[data[, 1] %in% manufacturer, ]}
else
{
 req(input$file1)
 paste_data <-({ input$paste })
 write.table(paste_data,"111")
 data <- as.matrix(mpg)
 manufacturer <- unique(paste_data[, 1])
 data[data[, 1] %in% manufacturer, ]
}})}
shinyApp(ui, server)
  

Я использовал приведенный выше код, чтобы разрешить пользователю вводить данные двух типов: один — из файла, а второй — для вставки некоторых входных данных. Я использовал данные mpg (ggplot2::mpg) в качестве ссылки. Но код работает только при пользовательском вводе через файл, если пользователь вставляет какой-либо ввод следующим образом

 audi
dodge
ford
  

ничего не отображается. Почему textAreaInput не работает?

Ответ №1:

Попробуйте приведенный ниже код. Используйте observeEvent вместо if else . Кроме того, я добавил условную панель. Для ввода текста, если вы задаете ввод через запятую или пробел, вы можете упростить преобразование текстовых данных в таблицу с помощью ‘strsplit’

 library(shiny)
ui <- fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      selectInput("choose","Choose file source",choices = c("file","text"),selected = NULL),
      conditionalPanel("input.choose=='file'",fileInput("file1", "Choose CSV File",multiple = TRUE,accept = c("text/csv","text/comma-        separated-values,text/plain", ".csv"))),
      conditionalPanel("input.choose=='text'",
                       p("Enter a comma or space separated list"),
                       textAreaInput("paste", "Or manufacturer",placeholder =  "Paste one manufacturer per line"),)),
      
    mainPanel(tableOutput("contents"))))
server <- function(input, output) {

  observeEvent(input$file1,{
    req(input$file1)
    output$contents=renderTable({data <- as.matrix(mpg)
                                df <- read.delim(input$file1$datapath,header = F)
                                manufacturer <- unique(df[, 1])
                                data[data[, 1] %in% manufacturer, ]})
    })
  
observeEvent(input$paste,{
  req(input$paste)
  mfg=strsplit(input$paste,",| ")
  output$contents=renderTable(data.frame('manfucature'=unlist(mfg)))
  
})
  
  }
shinyApp(ui, server)