วิธีสร้างเว็บแอปแบบโต้ตอบด้วย Shiny ใน R

Withi Srang Web Xaep Baeb Totxb Dwy Shiny Ni R



เนื่องจากเฟรมเวิร์ก R Shiny การรวมกลุ่มจาก RStudio การสร้างเว็บแอปแบบไดนามิกด้วย R จึงค่อนข้างง่าย ประโยชน์ของ Shiny คือทำให้สามารถใส่โค้ด R ของคุณบนเว็บได้ ทำให้ผู้ใช้ในวงกว้างสามารถเข้าถึงได้มากขึ้น ด้วย R Shiny คุณสามารถสร้างรายงานข้อมูลและภาพที่มีประสิทธิภาพมากซึ่งช่วยให้ผู้ใช้สามารถวิเคราะห์ชุดข้อมูลได้ นอกเหนือจากส่วนประกอบ Shiny แล้ว องค์ประกอบ HTML ยังสามารถใช้เพื่อออกแบบเนื้อหาของโปรแกรมได้ บทความวันนี้จะแนะนำคุณเกี่ยวกับกระบวนการสร้างเว็บแอปพลิเคชันเชิงโต้ตอบที่ใช้แพ็คเกจ R's Shiny ในการดำเนินการนี้ ตรวจสอบให้แน่ใจว่าได้ติดตั้ง “RStudio” ไว้แล้ว

ติดตั้ง Shiny Package ใน RStudio

ก่อนที่จะก้าวไปสู่การสร้างเว็บแอปพลิเคชันเชิงโต้ตอบภายใน RStudio เราควรติดตั้งแพ็คเกจ “Shiny” ไว้แล้ว ในการดำเนินการนี้ คุณต้องขยายเมนู 'เครื่องมือ' ของ RStudio ตามด้วยตัวเลือก 'ติดตั้งแพ็คเกจ' ภายในหน้าต่างที่เปิดอยู่ คุณต้องระบุแพ็คเกจที่คุณต้องการติดตั้ง เช่น “มันเงา” และแตะที่ปุ่ม “ติดตั้ง” RStudio จะติดตั้งแพ็คเกจมันวาวในคอนโซล RStudio







เริ่มต้นใช้งาน Shiny ใน R

ในการเริ่มต้นใช้งาน Shiny ใน R คุณต้องสร้างไฟล์ R ใหม่โดยใช้เมนู 'ไฟล์' ซึ่งอยู่ที่ตำแหน่งแรกของ RStudio ขยายและใช้ตัวเลือก 'ไฟล์ใหม่' ตามด้วยตัวเลือก 'สคริปต์ R' ไฟล์สคริปต์ 'ไม่มีชื่อ' จะถูกเปิดใน RStudio เปลี่ยนชื่อเป็นไฟล์ 'R' ในตำแหน่งที่คุณต้องการ



ตอนนี้ ให้โหลดแพ็คเกจที่จำเป็นเพื่อสร้างแอปพลิเคชันแบบโต้ตอบใน R เช่น การใช้ฟังก์ชัน 'library' ของ R คำสั่ง 'if' ใช้เพื่อติดตั้งแพ็คเกจที่ไม่เคยติดตั้งมาก่อน แพ็คเกจ Shiny ใช้เพื่อสร้างอินเทอร์เฟซแบบโต้ตอบสำหรับเว็บแอปพลิเคชันพร้อมกับการแสดงภาพกราฟิกบางส่วน แพ็คเกจ “dplyr” ส่วนใหญ่จะใช้เพื่ออำนวยความสะดวกในการจัดการข้อมูลใน R โดยใช้ฟังก์ชันที่มีประโยชน์บางอย่าง



สุดท้ายนี้ แพ็คเกจ “ggplot2” จะถูกโหลดเป็นแหล่งข้อมูลที่ยอดเยี่ยมในการแสดงภาพข้อมูลโดยการสร้างกราฟที่กำหนดเองและมีประสิทธิภาพ





ถ้า ( ! ต้องการเนมสเปซ ( 'แวววาว' เงียบๆ = จริง ) ) {

ติดตั้ง. แพคเกจ ( 'แวววาว' )

}

ถ้า ( ! ต้องการเนมสเปซ ( 'ดีพลีร์' เงียบๆ = จริง ) ) {

ติดตั้ง. แพคเกจ ( 'ดีพลีร์' )

}

ถ้า ( ! ต้องการเนมสเปซ ( 'ggplot2' เงียบๆ = จริง ) ) {

ติดตั้ง. แพคเกจ ( 'ggplot2' )

}

ห้องสมุด ( มันเงา )

ห้องสมุด ( ดีพลีร์ )

ห้องสมุด ( ggplot2 )

สร้างระบบให้คะแนนการสอบแบบโต้ตอบ

ภายในบทช่วยสอนนี้ เราจะสร้าง 'ระบบให้คะแนนการสอบ' สำหรับนักเรียนเพื่อให้ได้เกรดที่บรรลุผลผ่านคะแนนที่ได้เต็ม 100 สคริปต์ที่ให้มาคือองค์ประกอบ 'ui' ของแอป Shiny ซึ่งระบุการออกแบบและรูปลักษณ์ของ โปรแกรม. โปรแกรมสร้างฟลูอิดเพจ ซึ่งเป็นการออกแบบที่ปรับเปลี่ยนได้ซึ่งสามารถปรับขนาดให้เหมาะกับหน้าต่างเบราว์เซอร์ได้

“titlePanel” และ “sidebarLayout” เป็นลูกหลานของ “fluidPage” ชื่อ “Exam Grading System” ของโปรแกรมคือชื่อทั้งหมดที่แสดงใน “titlePanel” “sidebarPanel” และ “mainPanel” เป็นสองส่วนที่ “sidebarLayout” ใช้เพื่อแยกแอปพลิเคชันออกเป็น คู่อินพุตจะรวมอยู่ใน 'แถบด้านข้างแผง': 'textAreaInput' ชื่อ 'คะแนน' บวกกับ 'actionButton' ชื่อ 'คำนวณ'



นักเรียนแต่ละคนสามารถป้อนคะแนนได้หนึ่งคะแนนต่อบรรทัดโดยใช้ 'textAreaInput' การประเมินเกรดสามารถเริ่มได้โดยใช้ 'actionButton' คู่ของเอาต์พุตมีอยู่ใน 'mainPanel': 'tableOutput' ชื่อ 'Result' บวกกับ 'plotOutput' ชื่อ 'ResultGraph' ทั้ง “tableOutput” และ “plotOutput” จะนำเสนอผลการคำนวณในรูปแบบของกราฟ

อุ้ย <- หน้าของเหลว (

titlePanel ( “ระบบให้คะแนนข้อสอบ” ) ,
แถบด้านข้างเค้าโครง (
แถบด้านข้างแผง (
textAreaInput ( 'คะแนน' , 'กรอกคะแนนสำหรับนักเรียน (หนึ่งรายการต่อบรรทัด):' , '' ) ,
ปุ่มการกระทำ ( 'คำนวณ' , “มาคำนวณเกรดกันเถอะ” )
) ,
mainPanel (
ตารางเอาท์พุต ( 'ผลลัพธ์' ) ,
พล็อตเอาท์พุต ( “กราฟผลลัพธ์” )
) ) )

วิธีการเซิร์ฟเวอร์สร้างตรรกะฝั่งเซิร์ฟเวอร์ของแอปพลิเคชัน เครื่องหมายสำหรับนักเรียนจะถูกจัดเก็บไว้ในตัวแปรปฏิกิริยาชื่อ 'data' ในตอนแรก สำหรับสิ่งนี้ ปุ่ม 'คำนวณ' จะถูกตรวจสอบโดยวิธี 'observeEvent' ของ R หลังจากที่ปุ่มถูกทริกเกอร์ โค้ดจะแปลงค่าที่ป้อนในฟิลด์ข้อความที่ป้อนเป็นค่าตัวเลขในขั้นต้น

แต่ละคะแนนจะตามด้วยการขึ้นบรรทัดใหม่โดยใช้ '\n' เพื่อป้อนคะแนนใหม่ที่บรรทัดถัดไป วิธีการจะวางคะแนนใดก็ตามที่พบในตัวแปร “data” หากผู้ใช้ไม่ได้ป้อนข้อมูลคะแนน วิธีการจะแสดงข้อความพร้อมข้อผิดพลาด

เซิร์ฟเวอร์ <- การทำงาน ( อินพุตเอาต์พุต ) {

ข้อมูล <- ปฏิกิริยาปฏิกิริยา ( โมฆะ )

สังเกตเหตุการณ์ ( อินพุต $ คำนวณ {

คะแนน <- เช่น. ตัวเลข ( ไม่แสดงรายการ ( strsplit ( อินพุต $ คะแนน, ' \n ' ) ) )

ถ้า ( ความยาว ( คะแนน ) > 0 ) {

ข้อมูล ( คะแนน )

} อื่น {

ข้อมูล ( โมฆะ )

แสดงกิริยา ( โมดอลไดอะล็อก (

ชื่อ = 'ข้อผิดพลาด' ,

'ข้อผิดพลาด: โปรดเพิ่มมูลค่า!' ,

ง่ายปิด = จริง

) )

}

} )

มีการระบุเอาต์พุต 2 รายการ ได้แก่ “output$Result” บวก “output$ResultGraph” เพื่อแสดงคะแนนของนักเรียนและคะแนนที่ได้รับ เมธอดแบบไดนามิก renderTable() จะสร้างตารางข้อมูลของคะแนนทดสอบและเกรดของนักเรียนซึ่งมีป้ายกำกับว่า 'output$Result' เมธอด renderPlot() ซึ่งมีปฏิกิริยาเช่นเดียวกัน จะสร้างกราฟแท่งสำหรับเกรดของนักเรียนและบันทึกไว้ในเอาต์พุต “output$ResultGraph” ในทำนองเดียวกัน

ดังนั้นพวกเขาจะได้รับการตรวจสอบทุกครั้งที่มีการอัปเดตข้อมูลอินพุต นิพจน์ if (!is.null(data())) กำหนดว่าข้อมูลที่ได้รับนั้นเป็นโมฆะหรือไม่ สคริปต์ของคำสั่ง 'if' จะถูกดำเนินการหากไม่ว่างเปล่า เวกเตอร์ของคะแนนสำหรับนักเรียนประกอบขึ้นเป็น 'ข้อมูล' อินพุต นักเรียนทุกคนจะได้รับเกรดตามคะแนนของตนเองโดยใช้วิธี case_when() กรอบข้อมูลที่ประกอบด้วยเกรดของนักเรียนและเครื่องหมายทดสอบจะถูกสร้างขึ้นโดยใช้เมธอด data.frame() คอลัมน์ต่อไปนี้จะถูกเพิ่มในกรอบข้อมูล: “นักเรียน”, “คะแนน” และ “เกรด” การแจกแจงเกรดจะรวบรวมไว้ในตารางชื่อ 'GradeCount' โดยใช้เมธอด table()

ผลลัพธ์ $ ผลลัพธ์ <- renderTable ( {

ถ้า ( ! เป็น. โมฆะ ( ข้อมูล ( ) ) ) {

เกรด <- case_เมื่อ (

ข้อมูล ( ) > 80 ~ 'เอ' ,

ข้อมูล ( ) > 60 ~ 'บี' ,

ข้อมูล ( ) > 40 ~ 'ค' ,

ข้อมูล ( ) > 30 ~ 'ด' ,

จริง ~ 'ฟ'

)

ข้อมูล. กรอบ ( นักเรียน = 1 : : ความยาว ( ข้อมูล ( ) ) , คะแนน = ข้อมูล ( ) , ระดับ = เกรด )

}

} )

เอาท์พุท$ResultGraph <- renderPlot ( {

ถ้า ( ! เป็น. โมฆะ ( ข้อมูล ( ) ) ) {

เกรด <- case_เมื่อ (

ข้อมูล ( ) > 80 ~ 'เอ' ,

ข้อมูล ( ) > 60 ~ 'บี' ,

ข้อมูล ( ) > 40 ~ 'ค' ,

ข้อมูล ( ) > 30 ~ 'ด' ,

จริง ~ 'ฟ'

)

การนับเกรด <- โต๊ะ ( เกรด )

แผนภูมิแท่งถูกสร้างขึ้นโดยใช้ไลบรารี “ggplot2” การนับ (จำนวนนักเรียนทั้งหมดที่ได้รับแต่ละเกรด) และคอลัมน์เกรดจะถูกสร้างขึ้นใน DataFrame กราฟแท่งที่มีข้อมูล 'เกรด' บน 'แกน x' และข้อมูล 'นับ' บน 'แกน y' สร้างขึ้นโดยใช้วิธี geom_bar() ตัวเลือก stat = “identity” สั่งให้ ggplot2 ใช้ข้อมูลจริงโดยไม่มีการเปลี่ยนแปลงใดๆ ชื่อ ป้ายกำกับแกน x และป้ายกำกับแกน y ล้วนถูกเพิ่มผ่านวิธี 'ห้องปฏิบัติการ' สีของแถบถูกกำหนดโดยใช้เมธอด scale_fill_manual() เส้นกริดและส่วนประกอบโอเวอร์เลย์ที่ไม่จำเป็นจะถูกลบออกโดยใช้เมธอด theme_minimal() เมธอด ShinyApp(ui, เซิร์ฟเวอร์) จะสร้างแอป

ggplot ( ข้อมูล = ข้อมูล. กรอบ ( ระดับ = ชื่อ ( การนับเกรด ) , นับ = เช่น. ตัวเลข ( การนับเกรด ) ) ,
ใช่ ( x = เกรดและ = นับ, เติม = ระดับ ) ) +
geom_bar ( สถิติ = 'ตัวตน' ) +
ห้องปฏิบัติการ ( ชื่อ = “การแบ่งเกรด” ,
x = 'ระดับ' ,
และ = 'นับ' ) +
scale_fill_manual ( ค่านิยม = ( 'เอ' = 'สีเขียว' , 'บี' = 'สีม่วง' , 'ค' = 'สีชมพู' ,
'ด' = 'ส้ม' , 'ฟ' = 'สีแดง' ) ) +
theme_minimal ( )
}
} )
}
แอพมันเงา ( UI, เซิร์ฟเวอร์ )

เมื่อเรียกใช้โค้ดนี้ เรามีอินเทอร์เฟซแบบโต้ตอบซึ่งเราได้เพิ่มเครื่องหมายและคลิกที่ปุ่ม 'มาคำนวณเกรดกันเถอะ'

ตารางที่มีคะแนนและเกรดของนักเรียนจะปรากฏขึ้น ตามด้วยกราฟแท่งของการแจกแจงเกรดในสีต่างๆ

บทสรุป

คู่มือนี้จะอธิบายความสำคัญของการใช้แพ็คเกจ Shiny ในภาษา R ผ่าน RStudio เพื่อเสริมคำอธิบายของเรา เราได้สร้างเว็บแอปพลิเคชันเชิงโต้ตอบสำหรับระบบการให้เกรดของนักเรียนในโค้ด R โดยใช้แพ็คเกจ 'Shiny'