R-Shiny:在文件输入上选择输入反应

Posted

技术标签:

【中文标题】R-Shiny:在文件输入上选择输入反应【英文标题】:R-Shiny: Select input reactive on file input 【发布时间】:2020-06-27 02:54:02 【问题描述】:

我对 Shiny 很陌生,不确定我这样做是否正确/完全过于简单化。我正在尝试将列标题从 excel fileInput 拉到 selectInput 下拉框中。 所以基本上我希望选择框的选项由文件输入的标题决定。然后它会链接到我在服务器中的方程,它会根据列中的数据集(服务器中带有 input$col 的位)执行计算。 我感谢任何 cmets/答案, 谢谢

编辑:猜测一下,我需要使用 uiOutput 和 renderUI 吗??

ui

 ui <- fluidPage(theme = shinytheme(),

setBackgroundColor("white"),

titlePanel(img(src = "image.png", height = 125, width = 450)),

(h1("review app", style = "color:#337ab7")),
p("Calculate"),

headerPanel(h3("Input data here", style = "color:#337ab7")), 


sidebarLayout(
sidebarPanel( position =c("left"),  style = "color:#337ab7", 
    numericInput("SL",
                "SL", 1, min=1, max=10),

    numericInput("LT", "LT",0, min=0, max = 52),
    fileInput("file1", 'choose file',
              accept = c(".xlsx") ),
    selectInput("col", "Column", choices = unique(colnames(input$file1)
                                                   )),

   checkboxInput("smooth", "Clean my data", value = FALSE, width = NULL),

    actionButton("action_Calc", label = "Refresh & Calculate", icon("redo"), 
         style="color: #fff; background-color: #337ab7; border-color: #2e6da4"), 
     ),


mainPanel(
    tabsetPanel(
      tabPanel("SS", h1(textOutput("SS"), style = "color:#337ab7")),
      tabPanel("guide",  img(src = "guide.png", height = 200, width = 600)),
      tabPanel("Mydata", div(tableOutput('contents'), style="font-size:55%"))
          ))))

服务器

 server <- function(input, output) 


  Data <- reactive(
  req(input$file1)
  inFile <- input$file1
  read_excel(inFile$datapath, 1)
)

output$contents <- renderTable(bordered = TRUE, style= "border-color:#337ab7", hover = TRUE, 
  Data()
)


values<- reactiveValues()
observe(
    input$action_Calc
    values$int<- isolate( if (input$smooth) (round( input$SL*sqrt(input$LT/4)*sd( tsclean(Data()[[input$col]], 
       replace.missing = TRUE, lambda = NULL)) , digits= 2))
       else (round( input$SL*sqrt(input$LT/4)*sd(Data()[[input$col]]), digits = 2)) ))

    output$SS <- renderText(paste("Calculated is", values$int) )

ShinyApp(用户界面,服务器)

【问题讨论】:

我的问题与你的类似,请帮助我***.com/questions/65282962/… 【参考方案1】:

updatedSelectInput 应该为您完成。下面是一个最小的例子。

为了减少包依赖,我切换到加载 .csv 而不是 .xlsx。请注意,加载的文件未经过验证,因此如果有垃圾进入,您将得到垃圾。

library(shiny)

#UI
ui <- fluidPage(

    selectInput('mydropdown', label = 'Select', choices = 'No choices here yet'),

    fileInput('myfileinput', label = 'Select File', accept = c(".csv"))

)

#Server
server <- function(input, output, session) 

    observeEvent(input$myfileinput, 

        mytable <- read.csv(input$myfileinput$datapath)

        updateSelectInput(session, "mydropdown", label = "Select", choices = colnames(mytable))

    )



shinyApp(ui = ui, server = server)

【讨论】:

谢谢,这成功了。我可以问一下您说文件未验证为 xlsx 是什么意思吗? @firebelf 两点不同。首先是我的示例读取 .csv 而不是 .xlsx,这使它更简单一些。第二个是我的例子没有检查文件是否好,例如它没有检查文件是否有任何标题。 啊,我明白了,.csv 是一个非常简单的修复程序——现在将实现它。但是,您建议我如何查看输入数据的质量?我假设可能对导入的文件进行了多阶段检查(缺少数据、没有标题、异常值等?)? @firebelf 检查丢失的数据、没有标题和异常值听起来是个好主意。如果您需要进一步的帮助,请随时提出另一个问题。 感谢大家的帮助,非常感谢

以上是关于R-Shiny:在文件输入上选择输入反应的主要内容,如果未能解决你的问题,请参考以下文章

在单击反应表上选择行

我在选择选项上选择新项目后Useeffect不更新

网页上选择日期控件点不了,如图

应用程序在从表单(SwiftUI)的选择器上选择时扩展“其他”类别)

在语言选择上选择适当的 .rc 文件

在android上选择文件夹对话框?