1. 程式人生 > >R基礎學習(三)-- 簡單練習(shiny+mysql+barplot)

R基礎學習(三)-- 簡單練習(shiny+mysql+barplot)

user observe 實現 tle plot rstudio names eat lag

測試環境:win10+RStudio

提前準備:

install.packages(‘shiny‘)

install.packages(‘RMySQL‘)

數據表準備:

技術分享圖片

最終實現的界面效果如下:點擊【Click Me】按鈕,從數據庫讀出數據,並在界面畫出條形圖

技術分享圖片

正式開始!

在R項目(比如ShinyDemo)的目錄下新建一個文件夾barplotDemo

然後在這個目錄下新建兩個文件,ui.R和server.R

ui.R的代碼實現如下

library(shiny)

# Use a fluid Bootstrap layout
fluidPage(      
  
# Give the page a title titlePanel("A Simple Shiny Demo"), # Generate a row with a sidebar sidebarLayout( # Define the sidebar with one input sidebarPanel( actionButton("do", "Click Me") ), # Create a spot for the barplot mainPanel( plotOutput(
"dataPlot") ) ) )

server.R的代碼如下:

library(RMySQL)

# Define a server for the Shiny app
function(input, output) {
  observeEvent(input$do, {
   # connect the database conn
<- dbConnect(MySQL(), dbname = "test", username="root", password="123456",client.flag=CLIENT_MULTI_STATEMENTS) users
= dbGetQuery(conn, "SELECT * FROM tb_user") dbDisconnect(conn) output$dataPlot <- renderPlot({ vAge<-as.vector(unlist(users[3])) vName<-as.vector(unlist(users[2])) height<-vAge names(height)<-vName barplot(height) }) }) }

備註:

(1)observeEvent(input$do, { }) 是按鈕監聽處理

(2)barplot的【height】要麽是向量要麽是矩陣,而users是list,所以需要進行處理,可以在Console查看數據類型

> is.vector(users)
[1] FALSE
> is.array(users)
[1] FALSE
> mode(users)
[1] "list"
> vAge<-as.vector(unlist(users[3]))
> mode(vAge)
[1] "numeric"
> vAge
[1] 20 26 29 49 39 53 48
> vName<-as.vector(unlist(users[2]))
> mode(vName)
[1] "character"
> vName
[1] "Tom"   "Jack"  "Mary"  "Merry" "Jerry" "Jucy"  "Lucy" 

上面兩個R文件寫好代碼之後,在Console執行,記得在文件夾名字兩側加引號

> runApp(barplotDemo)

運行成功後,可以看到效果如下:

技術分享圖片

點擊【Click Me】,可以看到條形圖

技術分享圖片

到此結束~

R基礎學習(三)-- 簡單練習(shiny+mysql+barplot)