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:在文件输入上选择输入反应的主要内容,如果未能解决你的问题,请参考以下文章