我们的想法是开发一个闪亮的应用程序,帮助用户在用户界面上传文件(基本上是测试数据),然后用一个按钮检查预测和显示图形。
目前,我已经开发了UI,可以使用文件输入命令上传测试文件。
我现在已经知道如何包含触发的服务器命令 更改数据类型并检查缺失值。我不确定如何将这些代码集成到我的服务器中。
任何帮助都会很棒。或任何可以指导我的链接都是有帮助的。我花了一整天时间搜索相关帖子,但我无法找到并整合它。
下面是我想要集成的服务器代码和一般R代码。
UI代码:
shinyUI(fluidPage(
titlePanel("File Input"),
sidebarLayout(
sidebarPanel(
fileInput("file","Upload the file"), # fileinput() function is used to get the file upload contorl option
helpText("Default max. file size is 5MB"),
tags$hr(),
h5(helpText("Select the read.table parameters below")),
checkboxInput(inputId = 'header', label = 'Header', value = FALSE),
checkboxInput(inputId = "stringAsFactors", "stringAsFactors", FALSE),
br(),
radioButtons(inputId = 'sep', label = 'Separator', choices = c(Comma=',',Semicolon=';',Tab='\t', Space=''), selected = ',')
),
mainPanel(
uiOutput("tb")
)
)
))
shinyServer(function(input,output){
# file$datapath -> gives the path of the file
data <- reactive({
file1 <- input$file
if(is.null(file1)){return()}
read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)
})
output$filedf <- renderTable({
if(is.null(data())){return ()}
input$file
})
output$sum <- renderTable({
if(is.null(data())){return ()}
summary(data())
})
output$table <- renderTable({
if(is.null(data())){return ()}
data()
})
output$tb <- renderUI({
if(is.null(data()))
h5("Powered by", tags$img(src='RStudio-Ball.png', heigth=200, width=200))
else
tabsetPanel(tabPanel("About file", tableOutput("filedf")),tabPanel("Data", tableOutput("table")),tabPanel("Summary", tableOutput("sum")))
})
})
这是我想要与服务器代码集成的预处理步骤。
转换数据类型
claim[,c(2:12,16:22,25,30,31,33,32,34)] <- lapply(claim[,c(2:12,16:22,25,30,31,33,32,34)], as.numeric)
claim[,c(1, 13:15)] <- lapply(claim[,c(1, 13:15)], as.Date, format = "%d.%m.%Y")
缺少价值估算
mice_impute = mice(New,m=5, method='rf')
Imputed_data <- mice::complete(mice_impute, 3)
修改
我在R环境中设置的数据包含4000个观察,包含34个变量。
例如,我考虑了5个变量。
变量属于数据类型因子。
声明&lt; - c(V1,V2,V3,V4,V5) 第一步是我想将它们转换为数字。这是一般的R代码。
claim[,c(2:12,16:22,25,30,31,33,32,34)] <- lapply(claim[,c(2:12,16:22,25,30,31,33,32,34)], as.numeric)
claim[,c(1, 13:15)] <- lapply(claim[,c(1, 13:15)], as.Date, format = "%d.%m.%Y")
一旦转换,我想检查缺失的值,并在框中动态生成结果并使用鼠标包将它们归档。在我的R环境中,我已经有了鼠标代码。
基本上我的训练集将在R环境本身,上传的新测试数据应该在闪亮处理,并根据训练集预测结果。
答案 0 :(得分:3)
以下是我将如何处理此问题,但我无法对此进行测试,请参阅我对您问题的评论。
基本上,我们会将数据存储在reactiveVal
中,然后使用observeEvent
收听actionButton
(input$convert_button
上的点击,请注意您需要添加这到UI),然后修改数据。
首先,使用mtcars
数据集的工作示例。按上传以虚假上传您的数据,然后按转换以填充NA。
my_mtcars <- mtcars
my_mtcars$cyl[1:10]=NA
my_mtcars$wt[1:10]=NA
ui <- fluidPage(
actionButton('upload_button','Upload'),
actionButton('convert_button','Convert'),
tableOutput('table')
)
server <- shinyServer(function(input,output){
data <- reactiveVal()
# file$datapath -> gives the path of the file
observeEvent(input$upload_button, ignoreNULL=T, ignoreInit=T, {
data(my_mtcars)
})
observeEvent(input$convert_button, {
claim <- data() # read the data from the reactiveVal
claim[is.na(claim)] <- 0
data(claim) # write back the modified data to the reactiveVal
})
output$table <- renderTable({
if(is.null(data())){return ()}
data()
})
})
shinyApp(ui,server)
以下是如何使用您的数据执行此操作的示例,但正如我所说,我无法对此进行测试:
shinyServer(function(input,output){
data <- reactiveVal()
# file$datapath -> gives the path of the file
observeEvent(input$file, ignoreNULL=T, ignoreInit=T, {
file1 <- input$file
if(is.null(file1)){return()}
data(read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors))
})
observeEvent(input$convert_button, {
claim <- data() # read the data from the reactiveVal
claim[,c(2:12,16:22,25,30,31,33,32,34)] <- lapply(claim[,c(2:12,16:22,25,30,31,33,32,34)], as.numeric)
claim[,c(1, 13:15)] <- lapply(claim[,c(1, 13:15)], as.Date, format = "%d.%m.%Y")
data(claim) # write back the modified data to the reactiveVal
})
output$filedf <- renderTable({
if(is.null(data())){return ()}
input$file
})
output$sum <- renderTable({
if(is.null(data())){return ()}
summary(data())
})
output$table <- renderTable({
if(is.null(data())){return ()}
data()
})
output$tb <- renderUI({
if(is.null(data()))
h5("Powered by", tags$img(src='RStudio-Ball.png', heigth=200, width=200))
else
tabsetPanel(tabPanel("About file", tableOutput("filedf")),tabPanel("Data", tableOutput("table")),tabPanel("Summary", tableOutput("sum")))
})
})