Я пытаюсь создать простое приложение с R блестящим. Однако я не мог получить желаемый результат, который я хочу. Я не опытный в блестящем и не эксперт R. Вот код:
library(shiny)
ui <- fluidPage(
headerPanel("deneme"),
checkboxGroupInput("plots", "draw plots:",
choices=list("histogram", "qq","both"),
selected="histogram"),
sidebarPanel(
numericInput("mean", "rn mean", value=seq(0:5), min=0, max=5),
numericInput("sd","standart deviation",value=seq(0:5),min=0,max=5),
numericInput("n", " number of observations ", value=seq(30,50))
),
mainPanel(
textOutput("text1"),
fluidRow(splitLayout(cellWidths = c("60%", "40%"),
plotOutput("graph1"), plotOutput("graph2")))
)
)
server <- function(input, output) {
norm<-reactive({
set.seed(6)
rnorm(input$n,mean=input$mean,sd=input$sd)
})
output$text1<-renderText({
paste("A random normal distrubution of",
input$n, "observations is generated with parameters mean",
input$mean,"and standart deviation", input$sd)
})
output$graph1<-renderPlot({
if(identical(input$plots,"histogram")){
req(norm())
hist(norm())
}
})
output$graph2<- renderPlot({
if(identical(input$plots,"qq")) {
req(norm())
qqnorm(norm(), pch = 1, frame = FALSE)
qqline(norm(), col = "steelblue", lwd = 2)
}
})
observe({
if(identical(input$plots,"both")) {
req(norm())
output$graph1<- renderPlot({
hist(norm())
})
output$graph2<- renderPlot({
qqnorm(norm(), pch = 1, frame = FALSE)
qqline(norm(), col = "steelblue", lwd = 2)
})
}
})
}
shinyApp(ui = ui, server = server)
Я хочу, чтобы макет графика изменялся динамически в соответствии с выбором checkboxGroupInput
. Когда я нажимаю histogram
или qq
, я хочу построить неразделенный кадр только в одном кадре. Принимая во внимание, что когда я нажимаю both
, я хочу, чтобы графики были видны вместе в разделенной рамке из двух рядов. При отсутствии щелчка макет должен быть сброшен на один кадр снова. Я знаю, что делаю неправильно, сначала разбив макет в ui
. Я видел кое-что о renderUI
функции, но не мог понять, как она работает. Заранее спасибо.
Также я получил ошибку, связанную с оператором if:
Предупреждение в if (! Is.na (attribValue)) {:
условие имеет длину> 1, и будет использоваться только первый элемент
Предупреждение в charToRaw (enc2utf8 (текст)):
аргумент должен быть символьным вектором длины 1
все элементы, кроме первого, будут игнорироваться