if("shiny" %in% installed.packages("shiny") == FALSE)install.packages("shiny")
library(shiny)
ui <- shiny::fluidPage(
sliderInput(
inputId = "num1",
label = "숫자를 선택하세요",
value = 25,
min =1,
max = 50,
step = 1
),
plotOutput("hist")
)
server <- function(input, output){
output$hist <- renderPlot({
hist(rnorm(input$num1),
maing = "50 범위내에서 선택")
})
}
shiny::shinyApp(ui, server)
Shiny BMI
library(shiny)
bmi <- function(t,w){
t <- t/100
x <- w/(t*t)
return ( if(x>=40){'고도 비만'}else
if(x>=35 & x<40){'중등도 비만 (2단계 비만)'}else
if(x>=30 & x<35){'경도 비만 (1단계 비만)'}else
if(x>=25 & x<30){'과체중'}else
if(x>=18.5 & x<25){'정상'}else
{'저체중'})
}
bmi(180, 10)
ui <- fluidPage(
numericInput("t","키 :",10, min=1, max=100),
numericInput("w","몸무게 :",10, min=1, max=100),
verbatimTextOutput("value")
)
server <- function(input, output, session) {
output$value <- renderText({bmi(input$t,input$w)})
}
shinyApp(ui, server)
RPS
library(shiny)
library(shinyjs)
rps <- function(x){
# 가위 1, 바위 2, 보 3
# a - b = 0 비김
# a - b = 1, -2 b 패배
# a - b = -1, 2 b 승리
if(x=='가위'){
user <- 1
}else if(x=='바위'){
user <- 2
}else{
user <- 3
}
comp <- sample(1:3,1,replace = T)
result <- comp - user
print(result)
return (if(result == 1 | result == -2)'패배'
else if(result == -1 | result ==2) '승리'
else '비김')
}
ui <- fluidPage(
titlePanel("가위바위보 게임"),
sidebarLayout(
sidebarPanel(
helpText("가위, 바위, 보 중에서 선택하세요"),
selectInput("var",
label = "가위바위보",
choices = c("가위","바위","보"),
selected = "가위")
),
mainPanel(
textOutput("selectedVar")
)
)
)
server <- function(input, output, session) {
output$selectedVar <- renderText(
paste("경기결과 :",rps(input$var))
)
}
if(interactive()){
shinyApp(ui, server)
}
pop
if("plotly" %in% installed.packages("plotly") == FALSE)install.packages("plotly")
library(plotly)
library(shiny)
data <- data.frame(
Population <- sample(1:20,10,replace = T),
HouseHolds <- sample(1:20,10,replace = T),
year <- sample(c(2000,2010),10,replace = T)
)
ui <- fluidPage(
titlePanel(
title = h4("인구 조사", align = "center")
),
sidebarPanel(
sidebarLayout(
radioButtons("YEAR","10년 주기선택",
choices = c("2000", "2010"),
selected = "2000"
)
)
),
mainPanel(
plotOutput("bar",height=500)
)
)
server <- function(input, output, session){
reactive_data <- reactive({
selected.year <- as.numeric(input$YEAR)
return(data[data$year == selected_year])
})
output$bar <- renderPlot({
color <- c("blud", "red")
our_data <- reactive_data()
barplot(colSums(our_data[,c("Population","HouseHolds")]),
ylab <- "Total",
xlab <- "Census Year",
names.arg = c("Population","HouseHolds"),
col = color)
})
}
shinyApp(ui, server)
LS0tDQp0aXRsZTogIjIwMTgxMDA2IFNoaW55Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KDQpgYGB7cn0NCmlmKCJzaGlueSIgJWluJSBpbnN0YWxsZWQucGFja2FnZXMoInNoaW55IikgPT0gRkFMU0UpaW5zdGFsbC5wYWNrYWdlcygic2hpbnkiKQ0KbGlicmFyeShzaGlueSkNCnVpIDwtIHNoaW55OjpmbHVpZFBhZ2UoDQogIHNsaWRlcklucHV0KA0KICAgIGlucHV0SWQgPSAibnVtMSIsDQogICAgbGFiZWwgPSAi7Iir7J6Q66W8IOyEoO2Dne2VmOyEuOyalCIsDQogICAgdmFsdWUgPSAyNSwNCiAgICBtaW4gPTEsDQogICAgbWF4ID0gNTAsDQogICAgc3RlcCA9IDENCiAgKSwNCiAgcGxvdE91dHB1dCgiaGlzdCIpDQopDQpzZXJ2ZXIgPC0gZnVuY3Rpb24oaW5wdXQsIG91dHB1dCl7DQogICAgICAgICAgb3V0cHV0JGhpc3QgPC0gcmVuZGVyUGxvdCh7DQogICAgICAgICAgaGlzdChybm9ybShpbnB1dCRudW0xKSwNCiAgICAgICAgICBtYWluZyA9ICI1MCDrspTsnITrgrTsl5DshJwg7ISg7YOdIikNCiAgICB9KQ0KfQ0KDQpzaGlueTo6c2hpbnlBcHAodWksIHNlcnZlcikNCg0KYGBgDQoNCiMjIyBTaGlueSBCTUkNCg0KYGBge3J9DQpsaWJyYXJ5KHNoaW55KQ0KYm1pIDwtIGZ1bmN0aW9uKHQsdyl7DQogIHQgPC0gdC8xMDANCiAgeCA8LSB3Lyh0KnQpDQogIHJldHVybiAoIGlmKHg+PTQwKXsn6rOg64+EIOu5hOunjCd9ZWxzZQ0KICBpZih4Pj0zNSAmIHg8NDApeyfspJHrk7Hrj4Qg67mE66eMICgy64uo6rOEIOu5hOunjCknfWVsc2UNCiAgaWYoeD49MzAgJiB4PDM1KXsn6rK964+EIOu5hOunjCAoMeuLqOqzhCDruYTrp4wpJ31lbHNlDQogIGlmKHg+PTI1ICYgeDwzMCl7J+qzvOyytOykkSd9ZWxzZQ0KICBpZih4Pj0xOC41ICYgeDwyNSl7J+ygleyDgSd9ZWxzZQ0KICB7J+yggOyytOykkSd9KQ0KfQ0KDQpibWkoMTgwLCAxMCkNCg0KdWkgPC0gZmx1aWRQYWdlKA0KICBudW1lcmljSW5wdXQoInQiLCLtgqQgOiIsMTAsIG1pbj0xLCBtYXg9MTAwKSwNCiAgbnVtZXJpY0lucHV0KCJ3Iiwi66q466y06rKMIDoiLDEwLCBtaW49MSwgbWF4PTEwMCksDQogIHZlcmJhdGltVGV4dE91dHB1dCgidmFsdWUiKQ0KKQ0KDQpzZXJ2ZXIgPC0gZnVuY3Rpb24oaW5wdXQsIG91dHB1dCwgc2Vzc2lvbikgew0KICBvdXRwdXQkdmFsdWUgPC0gcmVuZGVyVGV4dCh7Ym1pKGlucHV0JHQsaW5wdXQkdyl9KQ0KfQ0KDQpzaGlueUFwcCh1aSwgc2VydmVyKQ0KDQpgYGANCiMjIyMgUlBTDQoNCmBgYHtyfQ0KbGlicmFyeShzaGlueSkNCmxpYnJhcnkoc2hpbnlqcykNCg0KcnBzIDwtIGZ1bmN0aW9uKHgpew0KICAjIOqwgOychCAxLCDrsJTsnIQgMiwg67O0IDMNCiAgIyBhIC0gYiA9IDAg67mE6rmADQogICMgYSAtIGIgPSAxLCAtMiBiIO2MqOuwsA0KICAjIGEgLSBiID0gLTEsIDIgYiDsirnrpqwNCiAgaWYoeD09J+qwgOychCcpew0KICAgIHVzZXIgPC0gMQ0KICB9ZWxzZSBpZih4PT0n67CU7JyEJyl7DQogICAgdXNlciA8LSAyDQogIH1lbHNlew0KICAgIHVzZXIgPC0gMw0KICB9DQogIGNvbXAgPC0gc2FtcGxlKDE6MywxLHJlcGxhY2UgPSBUKQ0KICByZXN1bHQgPC0gIGNvbXAgLSB1c2VyDQogIHByaW50KHJlc3VsdCkNCiAgcmV0dXJuIChpZihyZXN1bHQgPT0gMSB8IHJlc3VsdCA9PSAtMikn7Yyo67CwJw0KICAgICAgICAgIGVsc2UgaWYocmVzdWx0ID09IC0xIHwgcmVzdWx0ID09MikgJ+yKueumrCcNCiAgICAgICAgICBlbHNlICfruYTquYAnKQ0KfQ0KDQp1aSA8LSBmbHVpZFBhZ2UoDQogIHRpdGxlUGFuZWwoIuqwgOychOuwlOychOuztCDqsozsnoQiKSwNCiAgc2lkZWJhckxheW91dCgNCiAgICBzaWRlYmFyUGFuZWwoDQogICAgICBoZWxwVGV4dCgi6rCA7JyELCDrsJTsnIQsIOuztCDspJHsl5DshJwg7ISg7YOd7ZWY7IS47JqUIiksDQogICAgICBzZWxlY3RJbnB1dCgidmFyIiwNCiAgICAgICAgICAgICAgICAgIGxhYmVsID0gIuqwgOychOuwlOychOuztCIsDQogICAgICAgICAgICAgICAgICBjaG9pY2VzID0gYygi6rCA7JyEIiwi67CU7JyEIiwi67O0IiksDQogICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9ICLqsIDsnIQiKQ0KICAgICAgKSwNCiAgICAgIG1haW5QYW5lbCgNCiAgICAgICAgdGV4dE91dHB1dCgic2VsZWN0ZWRWYXIiKQ0KICAgICkNCiAgKQ0KKQ0KDQpzZXJ2ZXIgPC0gZnVuY3Rpb24oaW5wdXQsIG91dHB1dCwgc2Vzc2lvbikgew0KICBvdXRwdXQkc2VsZWN0ZWRWYXIgPC0gIHJlbmRlclRleHQoDQogICAgcGFzdGUoIuqyveq4sOqysOqzvCA6IixycHMoaW5wdXQkdmFyKSkNCiAgKQ0KfQ0KDQppZihpbnRlcmFjdGl2ZSgpKXsNCiAgc2hpbnlBcHAodWksIHNlcnZlcikgIA0KfQ0KDQpgYGANCg0KIyMjIHBvcA0KDQpgYGB7cn0NCmlmKCJwbG90bHkiICVpbiUgaW5zdGFsbGVkLnBhY2thZ2VzKCJwbG90bHkiKSA9PSBGQUxTRSlpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHNoaW55KQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBQb3B1bGF0aW9uIDwtIHNhbXBsZSgxOjIwLDEwLHJlcGxhY2UgPSBUKSwNCiAgSG91c2VIb2xkcyA8LSBzYW1wbGUoMToyMCwxMCxyZXBsYWNlID0gVCksDQogIHllYXIgPC0gc2FtcGxlKGMoMjAwMCwyMDEwKSwxMCxyZXBsYWNlID0gVCkNCikNCg0KdWkgPC0gZmx1aWRQYWdlKA0KICB0aXRsZVBhbmVsKA0KICB0aXRsZSA9IGg0KCLsnbjqtawg7KGw7IKsIiwgYWxpZ24gPSAiY2VudGVyIikNCiksDQogIHNpZGViYXJQYW5lbCgNCiAgIHNpZGViYXJMYXlvdXQoDQogICAgcmFkaW9CdXR0b25zKCJZRUFSIiwiMTDrhYQg7KO86riw7ISg7YOdIiwNCiAgICAgICAgICAgICAgICAgY2hvaWNlcyA9IGMoIjIwMDAiLCAiMjAxMCIpLA0KICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9ICIyMDAwIg0KICAgICAgICAgICAgICAgICApDQogICApDQogICksDQogIG1haW5QYW5lbCgNCiAgICBwbG90T3V0cHV0KCJiYXIiLGhlaWdodD01MDApDQogICkNCikNCg0Kc2VydmVyIDwtIGZ1bmN0aW9uKGlucHV0LCBvdXRwdXQsIHNlc3Npb24pew0KICByZWFjdGl2ZV9kYXRhIDwtIHJlYWN0aXZlKHsNCiAgICBzZWxlY3RlZC55ZWFyIDwtIGFzLm51bWVyaWMoaW5wdXQkWUVBUikNCiAgICByZXR1cm4oZGF0YVtkYXRhJHllYXIgPT0gc2VsZWN0ZWRfeWVhcl0pDQogIH0pDQogIG91dHB1dCRiYXIgPC0gcmVuZGVyUGxvdCh7DQogICAgY29sb3IgPC0gYygiYmx1ZCIsICJyZWQiKQ0KICAgIG91cl9kYXRhIDwtIHJlYWN0aXZlX2RhdGEoKQ0KICAgIGJhcnBsb3QoY29sU3VtcyhvdXJfZGF0YVssYygiUG9wdWxhdGlvbiIsIkhvdXNlSG9sZHMiKV0pLA0KICAgICAgeWxhYiA8LSAiVG90YWwiLA0KICAgICAgeGxhYiA8LSAiQ2Vuc3VzIFllYXIiLA0KICAgICAgbmFtZXMuYXJnID0gYygiUG9wdWxhdGlvbiIsIkhvdXNlSG9sZHMiKSwNCiAgICAgIGNvbCA9IGNvbG9yKQ0KICB9KQ0KfQ0KDQpzaGlueUFwcCh1aSwgc2VydmVyKQ0KDQpgYGANCg0K