所以,我是编码,R和数据科学的新手,并且主要通过在线教程获得所有这些。我写了一个闪亮的应用程序,我试图实现一些事情:
为此,我使用了Species
数据集。该应用程序的目的是允许用户选择输入和输出变量,这些变量将传递给线性回归模型。然后,用户将为其选定的变量提出分布,并使用在蒙特卡罗模拟中生成的线性模型,并输出结果的直方图。
然而,有些东西看起来并不正确,因为当我在输入和输出下选择相同的变量时我只能生成直方图,而我似乎不知道为什么?我的意思是,例如,我需要在Select input
和output
下选择library(shiny)
ui <- fluidPage(
fluidRow(
column(4,
wellPanel(
sliderInput("sampleSize","Please Select Sample Size:",
min = 0,max = 5000,value = 1000,step = 100),
uiOutput("invar"),
uiOutput("outvar"),
uiOutput("moC")))
),
mainPanel(
plotOutput("histogram")
)
)
server <- function(input, output) {
sorted <- reactive({
data <- iris[ ,c(input$inv)]
data})
output$invar<-renderUI({
selectizeInput('invar',"Select Regression Input Variables", choices = names(iris), multiple = TRUE)
})
output$outvar<-renderUI({
selectizeInput('outvar',"Select Regression Output Variable", choices = names(iris), multiple = FALSE)
})
sorted <- reactive({
iris[input$invar]
})
output$moC <- renderUI({
numvar<- length(input$invar)
lapply(1:numvar, function(i) {
tagList(
selectInput("inv",paste0("Please Select Probability Distribution of ", input$invar[i]),
choices = c("Normal","Uniform")),
conditionalPanel(condition = "input.inv=='Normal'",
textInput("invarpdfmean","Please Select Input Variable Mean:",2),
textInput("invarpdfsd","Please Select Input Variable Standard Deviation", 0.02)),
conditionalPanel(condition = "input.inv=='Uniform'",
textInput("invarpdfmin","Please Select Minimum Input Variable Value:",1),
textInput("invarpdfmax","Please Select Maximum Input Variable Value", 5))
)})})
output$histogram <- renderPlot({
n <- input$sampleSize
numvar<- length(input$invar)
SelectedVars <- input$invar
vartopredict <- input$outvar
fmla <- reformulate(SelectedVars, response = vartopredict)
lapply(1:numvar, function(i) {
if(input$invar[i]=="Normal"){
invarpdfVec <- rnorm(n,mean = as.numeric(input$invarpdfmean),sd= as.numeric(input$invarpdfsd))
}
if(input$invar[i]=="Uniform"){
invarpdfVec <- runif(n,min = as.numeric(input$invarpdfmin),max = as.numeric(input$invarpdfmax))
}
})
MCtab <- iris[ , input$invar]
pred.model=lm(fmla,MCtab)
for (n in 1:input$sampleSize){
h <- predict(pred.model,MCtab)
}
h<- hist(h,breaks=30,col="red",freq=F)
# Define the quartiles for the Min, Max, P10, P50 and P90
}
)
}
shinyApp(ui, server)
git push
答案 0 :(得分:0)
您最有可能遇到的问题是MCtab
变量。尝试
output$histogram <- renderPlot({
#...
MCtab <- iris[ , unique(c(SelectedVars, vartopredict)), drop=FALSE]
#...
})
您需要确保将data.frame作为您正在创建的公式中尝试使用的所有变量。