根据用户在 R Shiny 中的输入创建动态数据框 UI
Create a dynamic dataframe based on user’s inputs in R Shiny UI
我正在运行使用可用的训练数据集建立回归模型,比如 1000 个观察值和 5 个自变量。
现在我想 运行 这个模型针对测试数据集。所以我试图从 Shiny UI 上的用户手动获取测试数据集。
用户应该可以选择 select 测试数据集中的观察数量,例如50 次观察。
一旦用户提供了观察次数,用户应该能够查看 table 的 50 行和自变量(或任何其他视图)。
用户现在应该能够在 Shiny UI.
上为每个自变量在这 50 行中手动输入任意值
目前,在运行以下 UI.
的代码之后,我只能从用户那里获取每个变量的 1 个观察值
代码:
library(shiny)
ui<-shinyUI(fluidPage(
titlePanel("Model"),
sidebarLayout(
sidebarPanel(
sliderInput("Var1",label="Variable 1",min=100,max=1000,value=200,step=1),
sliderInput("Var2",label="Variable 2",min=500,max=800,value=600,step=1),
sliderInput("Var3",label="Variable 3",min=0,max=1,value=0.5,step=0.01),
sliderInput("Var4",label="Variable 4",min=1,max=20,value=5,step=1),
sliderInput("Var5",label="Variable 5",min=0,max=1,value=0.6,step=0.01),
actionButton("Run_model", "Run model")
),
mainPanel(
tabsetPanel(
tabPanel("model summary", verbatimTextOutput('summary'))
)
)
)))
server<- function(input,output,session){
set.seed(1234)
observe({
# this is how you fetch the input variables from ui component
Var1 <- as.integer(input$Var1)
Var2 <- as.integer(input$Var2)
Var3 <- as.numeric(input$Var3)
Var4 <- as.integer(input$Var4)
Var5 <- as.numeric(input$Var4)
test <- cbind(Var1, Var2, Var3, Var4, Var5)
test <- as.data.frame(test)
## Import dataset
train <- data.frame(replicate(6,sample(1:100,1000,rep=TRUE)))
names(train) <- c("Var1", "Var2", "Var3", "Var4", "Var5", "Var6")
# Var6 is the dependent variable
test$Var6 <- ""
# Model action button
observeEvent(input$Run_model, {
model <- randomForest(Var6 ~ ., data = train, ntree=500)
pred <- predict(model, newdata = test)
output$summary <- renderPrint(model)
})
})
}
shinyApp(ui=ui, server=server)
你好,你想看看如何使用 observe
和 reactive
。简单来说——
观察是什么时候你想修改一些 UI 对象或输入或者通常在后台做一些事情。输出的计算最好放在反应式表达式中。
我已经修改了你的代码,现在是 运行。
library(shiny)
library(randomForest)
ui<-shinyUI(fluidPage(
titlePanel("Model"),
sidebarLayout(
sidebarPanel(
sliderInput("Var1",label="Variable 1",min=100,max=1000,value=200,step=1),
sliderInput("Var2",label="Variable 2",min=500,max=800,value=600,step=1),
sliderInput("Var3",label="Variable 3",min=0,max=1,value=0.5,step=0.01),
sliderInput("Var4",label="Variable 4",min=1,max=20,value=5,step=1),
sliderInput("Var5",label="Variable 5",min=0,max=1,value=0.6,step=0.01),
actionButton("Run_model", "Run model")
),
mainPanel(
tabsetPanel(
tabPanel("model summary", verbatimTextOutput('summary'))
)
)
)))
server<- function(input,output,session){
set.seed(1234)
test <- reactive({
# this is how you fetch the input variables from ui component
Var1 <- as.integer(input$Var1)
Var2 <- as.integer(input$Var2)
Var3 <- as.numeric(input$Var3)
Var4 <- as.integer(input$Var4)
Var5 <- as.numeric(input$Var4)
test <- cbind(Var1, Var2, Var3, Var4, Var5)
test <- as.data.frame(test)
# Var6 is the dependent variable
test$Var6 <- ""
test
# Model action button
})
train <- reactive({
## Import dataset
train <- data.frame(replicate(6,sample(1:100,1000,rep=TRUE)))
names(train) <- c("Var1", "Var2", "Var3", "Var4", "Var5", "Var6")
train
})
pred <- eventReactive(input$Run_model, {
model <- randomForest(Var6 ~ ., data = train(), ntree=500)
predict(model, newdata = test())
})
output$summary <- renderText(pred())
}
shinyApp(ui=ui, server=server)
希望对您有所帮助!
我正在运行使用可用的训练数据集建立回归模型,比如 1000 个观察值和 5 个自变量。
现在我想 运行 这个模型针对测试数据集。所以我试图从 Shiny UI 上的用户手动获取测试数据集。 用户应该可以选择 select 测试数据集中的观察数量,例如50 次观察。 一旦用户提供了观察次数,用户应该能够查看 table 的 50 行和自变量(或任何其他视图)。 用户现在应该能够在 Shiny UI.
上为每个自变量在这 50 行中手动输入任意值目前,在运行以下 UI.
的代码之后,我只能从用户那里获取每个变量的 1 个观察值代码:
library(shiny)
ui<-shinyUI(fluidPage(
titlePanel("Model"),
sidebarLayout(
sidebarPanel(
sliderInput("Var1",label="Variable 1",min=100,max=1000,value=200,step=1),
sliderInput("Var2",label="Variable 2",min=500,max=800,value=600,step=1),
sliderInput("Var3",label="Variable 3",min=0,max=1,value=0.5,step=0.01),
sliderInput("Var4",label="Variable 4",min=1,max=20,value=5,step=1),
sliderInput("Var5",label="Variable 5",min=0,max=1,value=0.6,step=0.01),
actionButton("Run_model", "Run model")
),
mainPanel(
tabsetPanel(
tabPanel("model summary", verbatimTextOutput('summary'))
)
)
)))
server<- function(input,output,session){
set.seed(1234)
observe({
# this is how you fetch the input variables from ui component
Var1 <- as.integer(input$Var1)
Var2 <- as.integer(input$Var2)
Var3 <- as.numeric(input$Var3)
Var4 <- as.integer(input$Var4)
Var5 <- as.numeric(input$Var4)
test <- cbind(Var1, Var2, Var3, Var4, Var5)
test <- as.data.frame(test)
## Import dataset
train <- data.frame(replicate(6,sample(1:100,1000,rep=TRUE)))
names(train) <- c("Var1", "Var2", "Var3", "Var4", "Var5", "Var6")
# Var6 is the dependent variable
test$Var6 <- ""
# Model action button
observeEvent(input$Run_model, {
model <- randomForest(Var6 ~ ., data = train, ntree=500)
pred <- predict(model, newdata = test)
output$summary <- renderPrint(model)
})
})
}
shinyApp(ui=ui, server=server)
你好,你想看看如何使用 observe
和 reactive
。简单来说——
观察是什么时候你想修改一些 UI 对象或输入或者通常在后台做一些事情。输出的计算最好放在反应式表达式中。
我已经修改了你的代码,现在是 运行。
library(shiny)
library(randomForest)
ui<-shinyUI(fluidPage(
titlePanel("Model"),
sidebarLayout(
sidebarPanel(
sliderInput("Var1",label="Variable 1",min=100,max=1000,value=200,step=1),
sliderInput("Var2",label="Variable 2",min=500,max=800,value=600,step=1),
sliderInput("Var3",label="Variable 3",min=0,max=1,value=0.5,step=0.01),
sliderInput("Var4",label="Variable 4",min=1,max=20,value=5,step=1),
sliderInput("Var5",label="Variable 5",min=0,max=1,value=0.6,step=0.01),
actionButton("Run_model", "Run model")
),
mainPanel(
tabsetPanel(
tabPanel("model summary", verbatimTextOutput('summary'))
)
)
)))
server<- function(input,output,session){
set.seed(1234)
test <- reactive({
# this is how you fetch the input variables from ui component
Var1 <- as.integer(input$Var1)
Var2 <- as.integer(input$Var2)
Var3 <- as.numeric(input$Var3)
Var4 <- as.integer(input$Var4)
Var5 <- as.numeric(input$Var4)
test <- cbind(Var1, Var2, Var3, Var4, Var5)
test <- as.data.frame(test)
# Var6 is the dependent variable
test$Var6 <- ""
test
# Model action button
})
train <- reactive({
## Import dataset
train <- data.frame(replicate(6,sample(1:100,1000,rep=TRUE)))
names(train) <- c("Var1", "Var2", "Var3", "Var4", "Var5", "Var6")
train
})
pred <- eventReactive(input$Run_model, {
model <- randomForest(Var6 ~ ., data = train(), ntree=500)
predict(model, newdata = test())
})
output$summary <- renderText(pred())
}
shinyApp(ui=ui, server=server)
希望对您有所帮助!