Cách xây dựng ứng dụng web tương tác với Shiny trong R

Cach Xay Dung Ung Dung Web Tuong Tac Voi Shiny Trong R



Nhờ có khung R Shiny, một gói từ RStudio, việc tạo các ứng dụng web động bằng R tương đối dễ dàng. Lợi ích của Shiny là nó có thể đưa mã R của bạn lên web, giúp nhiều người dùng dễ tiếp cận hơn. Với R Shiny, bạn có thể tạo báo cáo dữ liệu và hình ảnh rất mạnh mẽ cho phép người dùng phân tích tập dữ liệu. Cùng với các thành phần Shiny, các thành phần HTML có thể được sử dụng để thiết kế nội dung của chương trình. Bài viết hôm nay sẽ hướng dẫn bạn quy trình xây dựng một ứng dụng Web tương tác sử dụng gói Shiny của R. Đối với điều này, hãy đảm bảo đã cài đặt “RStudio”.

Cài đặt gói Shiny trong RStudio

Trước khi chuyển sang tạo một ứng dụng web tương tác trong RStudio, chúng ta nên cài đặt sẵn gói “Shiny” trong đó. Để làm được điều này, bạn cần mở rộng menu “Công cụ” của RStudio, sau đó là tùy chọn “Cài đặt gói”. Trong cửa sổ mở ra, bạn phải đề cập đến gói mà bạn muốn cài đặt, tức là “sáng bóng” và nhấn vào nút “Cài đặt”. RStudio sẽ cài đặt gói sáng bóng trong bảng điều khiển RStudio.







Bắt đầu với Shiny trong R

Để bắt đầu với Shiny in R, bạn cần tạo một tệp R mới bằng cách sử dụng menu “Tệp” nằm ở vị trí đầu tiên của RStudio. Mở rộng nó và sử dụng tùy chọn “Tệp mới”, sau đó là tùy chọn “R Script”. Tệp tập lệnh “không có tiêu đề” sẽ được mở trong RStudio. Đổi tên nó thành tệp “R” ở vị trí bạn muốn.



Bây giờ, tải các gói cần thiết cần thiết để xây dựng một ứng dụng tương tác trong R, tức là sử dụng chức năng “thư viện” của R. Câu lệnh “if” được sử dụng để cài đặt các gói chưa được cài đặt trước đó. Gói Shiny được sử dụng để xây dựng giao diện tương tác cho các ứng dụng web cùng với một số trực quan hóa đồ họa. Gói “dplyr” chủ yếu được sử dụng để giảm bớt thao tác dữ liệu trong R bằng cách sử dụng một số chức năng hữu ích.



Cuối cùng, gói “ggplot2” được tải như một nguồn trực quan hóa dữ liệu tuyệt vời bằng cách tạo các biểu đồ mạnh mẽ và tùy chỉnh.





nếu như ( ! không gian tên yêu cầu ( 'sáng bóng' , lặng lẽ = ĐÚNG VẬY ) ) {

cài đặt. gói ( 'sáng bóng' )

}

nếu như ( ! không gian tên yêu cầu ( 'dplyr' , lặng lẽ = ĐÚNG VẬY ) ) {

cài đặt. gói ( 'dplyr' )

}

nếu như ( ! không gian tên yêu cầu ( 'ggplot2' , lặng lẽ = ĐÚNG VẬY ) ) {

cài đặt. gói ( 'ggplot2' )

}

thư viện ( sáng bóng )

thư viện ( dplyr )

thư viện ( ggplot2 )

Xây dựng hệ thống chấm điểm bài thi tương tác

Trong hướng dẫn này, chúng tôi sẽ tạo một “Hệ thống chấm điểm bài kiểm tra” để học sinh đạt được điểm đạt được thông qua điểm đạt được trên 100. Tập lệnh được cung cấp là thành phần “ui” của ứng dụng Shiny chỉ định thiết kế và giao diện của chương trình. Chương trình tạo ra FluidPage, một thiết kế có khả năng thích ứng, có thể điều chỉnh tỷ lệ để điều chỉnh cho phù hợp với cửa sổ trình duyệt.

“titlePanel” và “sidebarLayout” là con của “fluidPage”. Tiêu đề “Hệ thống chấm điểm bài kiểm tra” của chương trình là tất cả những gì được hiển thị trong “titlePanel”. “sidebarPanel” và “mainPanel” là hai phần mà “sidebarLayout” sử dụng để chia ứng dụng thành hai phần. Một cặp đầu vào được bao gồm trong “sidebarPanel”: một “textAreaInput” có tên là “score” cộng với một “actionButton” có tên là “calate”.



Mỗi học sinh có thể nhập một điểm trên mỗi dòng bằng cách sử dụng “textAreaInput”. Việc đánh giá điểm có thể được bắt đầu bằng cách sử dụng “actionButton”. Một cặp kết quả đầu ra có trong “mainPanel”: một “tableOutput” có tên là “Result” cộng với một “plotOutput” có tên là “ResultGraph”. Cả “tableOutput” và “plotOutput” sẽ trình bày kết quả tính toán dưới dạng biểu đồ.

ui <- chất lỏngTrang (

tiêu đềBảng điều khiển ( 'Hệ thống chấm điểm bài thi' ) ,
thanh bênBố cục (
thanh bênBảng điều khiển (
văn bảnKhu vựcĐầu vào ( 'điểm' , 'Nhập điểm cho học sinh (mỗi dòng một điểm):' , '' ) ,
nút hành động ( 'tính toán' , 'Hãy tính điểm' )
) ,
bảng điều khiển chính (
bảngĐầu ra ( 'Kết quả' ) ,
đầu ra cốt truyện ( 'Biểu đồ kết quả' )
) ) )

Phương thức máy chủ thiết lập logic phía máy chủ của ứng dụng. Điểm của học sinh ban đầu được lưu trữ trong một biến phản ứng có tên là “dữ liệu”. Đối với điều này, nút “tính toán” được giám sát bằng phương pháp “observeEvent” của R. Sau khi nút được kích hoạt, ban đầu mã sẽ chuyển đổi các giá trị được nhập vào trường văn bản đầu vào thành giá trị số.

Sau mỗi điểm là dấu ngắt dòng bằng cách sử dụng “\n” để nhập điểm mới ở dòng tiếp theo. Phương thức này đặt bất kỳ điểm nào nó tìm thấy vào biến “dữ liệu”. Nếu người dùng không nhập điểm, phương thức sẽ hiển thị thông báo có lỗi.

máy chủ <- chức năng ( đầu ra đầu vào ) {

dữ liệu <- phản ứngVal ( VÔ GIÁ TRỊ )

quan sátSự kiện ( đầu vào $ tính toán, {

điểm <- BẰNG. số ( hủy niêm yết ( strsplit ( điểm $ đầu vào, ' \N ' ) ) )

nếu như ( chiều dài ( điểm ) > 0 ) {

dữ liệu ( điểm )

} khác {

dữ liệu ( VÔ GIÁ TRỊ )

showModal ( modalDialog (

tiêu đề = 'Lỗi' ,

'Lỗi: Vui lòng thêm giá trị!' ,

dễ dàngĐóng = ĐÚNG VẬY

) )

}

} )

Hai kết quả đầu ra, “output$Result” cộng với “output$ResultGraph”, được chỉ định để hiển thị điểm của học sinh và điểm đạt được. Phương thức động renderTable() tạo ra một bảng dữ liệu về điểm kiểm tra và điểm số của học sinh được gắn nhãn là “output$Result”. Phương thức renderPlot(), cũng có tính phản ứng tương tự, tạo ra một biểu đồ thanh cho điểm của học sinh và lưu nó vào đầu ra “output$ResultGraph” tương tự.

Do đó, chúng sẽ được xem xét mỗi khi cập nhật dữ liệu đầu vào. Biểu thức if (!is.null(data())) xác định xem dữ liệu đang được nhận có rỗng hay không. Tập lệnh của câu lệnh “if” được thực hiện nếu nó không trống. Một vectơ điểm dành cho học sinh tạo thành “dữ liệu” đầu vào. Mỗi học sinh được cho điểm dựa trên điểm của họ bằng phương thức case_when(). Một khung dữ liệu chứa điểm và điểm kiểm tra của học sinh được tạo bằng phương thức data.frame(). Các cột sau được thêm vào khung dữ liệu: “Học sinh”, “Điểm” và “Lớp”. Việc phân bổ điểm được tổng hợp trong một bảng có tên là “GradeCount” bằng phương thức table().

đầu ra$Kết quả <- bảng kết xuất ( {

nếu như ( ! là. vô giá trị ( dữ liệu ( ) ) ) {

điểm <- trường hợp_khi nào (

dữ liệu ( ) > 80 ~ 'MỘT' ,

dữ liệu ( ) > 60 ~ 'B' ,

dữ liệu ( ) > 40 ~ 'C' ,

dữ liệu ( ) > 30 ~ 'D' ,

ĐÚNG VẬY ~ 'F'

)

dữ liệu. khung ( Học sinh = 1 : chiều dài ( dữ liệu ( ) ) , Điểm = dữ liệu ( ) , Cấp = điểm )

}

} )

đầu ra$ResultGraph <- kết xuấtPlot ( {

nếu như ( ! là. vô giá trị ( dữ liệu ( ) ) ) {

điểm <- trường hợp_khi nào (

dữ liệu ( ) > 80 ~ 'MỘT' ,

dữ liệu ( ) > 60 ~ 'B' ,

dữ liệu ( ) > 40 ~ 'C' ,

dữ liệu ( ) > 30 ~ 'D' ,

ĐÚNG VẬY ~ 'F'

)

Số lớp <- bàn ( điểm )

Biểu đồ thanh được tạo bằng thư viện “ggplot2”. Đếm (tổng số học sinh đạt từng lớp) và cột Lớp được tạo trong DataFrame. Biểu đồ thanh có dữ liệu “Cấp” trên “trục x” và dữ liệu “Đếm” trên “trục y” được tạo bằng phương thức geom_bar(). Tùy chọn stat = “identity” hướng dẫn ggplot2 sử dụng dữ liệu thực tế mà không cần bất kỳ hình thức chuyển đổi nào. Tiêu đề, nhãn trục x và nhãn trục y đều được thêm thông qua phương pháp “labs”. Màu sắc của thanh được chỉ định bằng phương thứcscale_fill_manual(). Các đường lưới và thành phần lớp phủ không cần thiết sẽ bị xóa bằng phương thức theme_minimal(). Phương thức ShinyApp(ui, server) xây dựng một ứng dụng.

ggplot ( dữ liệu = dữ liệu. khung ( Cấp = tên ( Số lớp ) , Đếm = BẰNG. số ( Số lớp ) ) ,
ôi ( x = Lớp, và = Đếm, điền vào = Cấp ) ) +
thanh địa lý ( chỉ số = 'danh tính' ) +
phòng thí nghiệm ( tiêu đề = 'Phân phối cấp độ' ,
x = 'Cấp' ,
= 'Đếm' ) +
quy mô_fill_manual ( giá trị = c ( 'MỘT' = 'màu xanh lá' , 'B' = 'màu tím' , 'C' = 'hồng' ,
'D' = 'quả cam' , 'F' = 'màu đỏ' ) ) +
chủ đề_tối thiểu ( )
}
} )
}
ứng dụng sáng bóng ( ui, máy chủ )

Khi chạy mã này, chúng tôi có một giao diện tương tác trong đó chúng tôi đã thêm một số điểm và nhấp vào nút “Hãy tính điểm”.

Bảng chứa điểm và thứ hạng của học sinh được hiển thị, theo sau là biểu đồ Thanh phân bổ điểm bằng các màu khác nhau.

Phần kết luận

Hướng dẫn này giải thích tầm quan trọng của việc sử dụng gói Shiny bằng ngôn ngữ R thông qua RStudio. Để bổ sung cho phần giải thích của mình, chúng tôi đã xây dựng một ứng dụng web tương tác cho hệ thống chấm điểm của học sinh bằng mã R bằng cách sử dụng gói “Shiny”.