■ Rshiny 사용방법
https://shiny.rstudio.com/gallery/
■ R shiny 가 무엇인가
R의 강력한 그래픽 기능과 통계 분석 능력을 이용하고,
사용자 상호작용을 쉽게 만들 수 있는 언어를 말한다.
샤이니 패키지를 이용해서 편하게 사용자 인터페이스(User Interface)를
이용할 수 있다.
■ R 샤이니 기본 골격
유져 인터페이스 와 서버
↓ ↓
frontier backend tier
■ 샤이니 기본 예제1
install.packages("DT")
library(DT)
library(shiny)
library(ggplot2)
head(mpg)
str(mpg)
summary(mpg)
# A tibble: 6 x 11
manufacturer model displ year
cyl trans drv cty
hwy fl class
<chr> <chr>
<dbl> <int> <int> <chr> <chr>
<int> <int> <chr> <chr>
1 audi a4
1.8 1999 4
auto(l5) f 18
29 p compact
2 audi a4
1.8 1999 4 manual(m5)
f 21 29 p
compact
3 audi a4
2 2008 4 manual(m6)
f 20 31 p
compact
4 audi a4
2 2008 4
auto(av) f 21
30 p compact
5 audi a4
2.8 1999 6
auto(l5) f 16
26 p compact
6 audi a4
2.8 1999 6 manual(m5)
f 18 26 p
compact
■ 샤이니의 큰 기본 골격
1. 화면개발
ui <- ......
2. 서버단 개발
server <- .......
3. 실행하는 명령어
shinyApp(ui = ui, server = server)
# Define UI ----
ui <- fluidPage(
titlePanel("Basic DataTable"),
# Create a new Row in the UI for selectInputs
fluidRow(
column(4,
selectInput("man",
"Manufacturer:",
c("All",
unique(as.character(mpg$manufacturer))))
),
column(4,
selectInput("trans",
"Transmission:",
c("All",
unique(as.character(mpg$trans))))
),
column(4,
selectInput("cyl",
"Cylinders:",
c("All",
unique(as.character(mpg$cyl))))
)
),
# Create a new row for the table.
DT::dataTableOutput("table")
)
)
# Define server logic ----
server <- function(input, output) {
# Filter data based on selections
output$table <- DT::renderDataTable(DT::datatable({
data <- mpg
if (input$man != "All") {
data <- data[data$manufacturer == input$man,]
}
if (input$cyl != "All") {
data <- data[data$cyl == input$cyl,]
}
if (input$trans != "All") {
data <- data[data$trans == input$trans,]
}
data
}))
}
# Run the app ----
shinyApp(ui = ui, server = server)
■ 위 코드로 emp 적용시키기
#install.packages("DT")
#library(DT)
library(shiny)
library(ggplot2)
emp <- read.csv("D:\\data\\emp.csv", header=T)
# Define UI ----
ui <- fluidPage( # 골격만드는 함수 fluidPage
titlePanel("EMP DataTable"), # 페이지네이밍. 이름 한글로 바꿔도 상관없음
# Create a new Row in the UI for selectInputs
fluidRow( # 샤이니 페이지의 상단 카테고리들. (All▼ 있는 부분들)
column(4, # 숫자 4는 All▼ 이 부분의 크기. 1로 하면 작아진다
selectInput("job", # job: ALL▼ 있는 부위를 지칭. 하단 서버단에서 쓰인다.
"job:", # All▼ 콘솔창 있는 부분. 역시나 한글 아무거나 써도 된다.
c("All",
unique(as.character(emp$job)))) #직업을 출력하는데, 중복제거.
# "All"과 unique를 컴바인 시켰다.
),
column(4,
selectInput("deptno",
"deptno:",
c("All",
unique(as.character(emp$deptno))))
),
column(4,
selectInput("sal",
"sal:",
c("All",
unique(as.character(emp$sal))))
)
),
# Create a new row for the table.
DT::dataTableOutput("table") # "table"이 아래 output에서 그대로 쓰여야함.
#즉 명칭이 일치해야 함.
)
)
# Define server logic ----
server <- function(input, output) {
# Filter data based on selections
output$table <- DT::renderDataTable(DT::datatable({
data <- emp
if (input$job != "All") {
data <- data[data$job == input$job,] # 행 조건만 지정, 열조건 없으니 전부 가져옴
}
if (input$deptno != "All") {
data <- data[data$deptno == input$deptno,]
}
if (input$sal != "All") {
data <- data[data$sal == input$sal,]
}
data
}))
}
# Run the app ----
shinyApp(ui = ui, server = server)
문제109. 샤이니의 기본 화면을 실행하시오
(선생님이 주신 lesson_2 활용)
library(shiny)
# Define UI ----
ui <- fluidPage(
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
※ 기본골격. 아무것도 없음
문제110. ui 에 아래의 내용을 추가하시오
library(shiny)
# Define UI ----
ui <- fluidPage(
titlePanel("title panel"),
sidebarLayout(
sidebarPanel("sidebar panel"),
mainPanel("main panel")
)
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
문제111. "sidebar panel" 이 오른쪽에 나오게 하시오.
library(shiny)
# Define UI ----
ui <- fluidPage(
titlePanel("title panel"),
sidebarLayout(position = "right", # mainPanel은 이동안됨!
sidebarPanel("sidebar panel"),
mainPanel("main panel")
)
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
문제112. header를 출력하시오
library(shiny)
# Define UI ----
ui <- fluidPage(
titlePanel("My Shiny App"),
sidebarLayout(
sidebarPanel(),
mainPanel(
h1("First level title"),
h2("Second level title"),
h3("Third level title"),
h4("Fourth level title"),
h5("Fifth level title"),
h6("Sixth level title")
)
)
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
※ 글자크기는 명령어 적히는 순서에 따라 정해진다.
h6이 h1 아래에 오면 2번째로 크게 출력된다.
※ 이하 다음 기본 예제들(참고하시오)
library(shiny)
# Define UI ----
ui <- fluidPage(
titlePanel("My Star Wars App"),
sidebarLayout(
sidebarPanel(),
mainPanel(
h6("Episode IV", align = "center"),
h6("A NEW HOPE", align = "center"),
h5("It is a period of civil war.", align = "center"),
h4("Rebel spaceships, striking", align = "center"),
h3("from a hidden base, have won", align = "center"),
h2("their first victory against the", align = "center"),
h1("evil Galactic Empire.")
)
)
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
문제6 . 아래와 같이 글씨의 색깔도 출력되게 하시오
library(shiny)
# Define UI ----
ui <- fluidPage(
titlePanel("My Shiny App"),
sidebarLayout(
sidebarPanel(),
mainPanel(
p("p creates a paragraph of text."),
p("A new p() command starts a new paragraph. Supply a style attribute to change the format of the entire paragraph.", style = "font-family: 'times'; font-si16pt"),
strong("strong() makes bold text."),
em("em() creates italicized (i.e, emphasized) text."),
br(),
code("code displays your text similar to computer code"),
div("div creates segments of text with a similar style. This division of text is all blue because I passed the argument 'style = color:blue' to div", style = "color:blue"),
br(),
p("span does the same thing as div, but it works with",
span("groups of words", style = "color:blue"),
#연속된 문장안에서 포인트 주고싶을 때 span 을 사용한다
"that appear inside a paragraph.")
)
)
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
문제7. 아래와 같이 이미지가 출력되게하시오 !
*mainPanel 에 이미지 불러오는 src 넣어서
이미지 추가도 가능하다
library(shiny)
# Define UI ----
ui <- fluidPage(
titlePanel("My Shiny App"),
sidebarLayout(
sidebarPanel(),
mainPanel(
img(src = "rstudio.png", height = 140, width = 400)
)
)
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
문제113.
shiny 에서 모든걸 다룰 수 있는 필요기능 구현코드 확인하시오
library(shiny)
# Define UI ----
ui <- fluidPage(
titlePanel("Basic widgets"),
fluidRow(
column(3,
h3("Buttons"),
actionButton("action", "Action"),
br(),
br(),
submitButton("Submit")),
column(3,
h3("Single checkbox"),
checkboxInput("checkbox", "Choice A", value = TRUE)),
column(3,
checkboxGroupInput("checkGroup",
h3("Checkbox group"),
choices = list("Choice 1" = 1,
"Choice 2" = 2,
"Choice 3" = 3),
selected = 1)),
column(3,
dateInput("date",
h3("Date input"),
value = "2014-01-01"))
),
fluidRow(
column(3,
dateRangeInput("dates", h3("Date range"))),
column(3,
fileInput("file", h3("File input"))),
column(3,
h3("Help text"),
helpText("Note: help text isn't a true widget,",
"but it provides an easy way to add text to",
"accompany other widgets.")),
column(3,
numericInput("num",
h3("Numeric input"),
value = 1))
),
fluidRow(
column(3,
radioButtons("radio", h3("Radio buttons"),
choices = list("Choice 1" = 1, "Choice 2" = 2,
"Choice 3" = 3),selected = 1)),
column(3,
selectInput("select", h3("Select box"),
choices = list("Choice 1" = 1, "Choice 2" = 2,
"Choice 3" = 3), selected = 1)),
column(3,
sliderInput("slider1", h3("Sliders"),
min = 0, max = 100, value = 50),
sliderInput("slider2", "",
min = 0, max = 100, value = c(25, 75))
),
column(3,
textInput("text", h3("Text input"),
value = "Enter text..."))
)
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
■ 이미지를 넣고 맞추는 샤이니
https://aidencahn.shinyapps.io/cifar10_densenet/
'R' 카테고리의 다른 글
그래프(산포도, 구글 그래프) (0) | 2019.03.09 |
---|---|
그래프(원형,막대) (0) | 2019.03.09 |
SQL과 R과 비교(서브쿼리) (0) | 2019.03.09 |
SQL과 R과 비교(조인) (0) | 2019.03.09 |
SQL과 R과 비교(그룹함수) (0) | 2019.03.09 |