2015-07-22 19 views
5

Tôi cần triển khai một ShinyApp với Shiny Server. Để chạy, ứng dụng của tôi cần dữ liệu từ tệp .RData (~ 300 Mo). Tệp .RData này được tải với tuyên bố load(...) nằm trong tệp global.R. Chức năng của máy tính, tải có thể cần vài phút những gì không thân thiện với người dùng.R: Chỉ tải một lần a. Dữ liệu trong một ShinyApp được triển khai

Làm cách nào để chúng tôi có thể tải tệp .RDate một lần để mỗi người dùng mới không cần phải tải lại tệp .RData?

Cảm ơn.

Trả lời

2

Nếu bạn tải đối tượng trong global.R, thì chỉ cần tải một lần. Mỗi người dùng sau lần đầu tiên phải có quyền truy cập nhanh vào ứng dụng của bạn.

Nếu bạn đang phát triển cục bộ ứng dụng của mình, bạn có thể kiểm tra những gì tôi đang nói theo cách sau. Hãy bắt đầu ứng dụng của bạn, ví dụ:

runApp(port=5050) 

chỉ để đặt cổng. Bạn cần một chút thời gian để trình duyệt của bạn hiển thị ứng dụng. Sau khi tải, lưu ý địa chỉ của ứng dụng của bạn (phải là 127.0.0.1:5050), đóng tab trình duyệt của ứng dụng (nhưng không dừng R!), Mở một tab mới và đặt địa chỉ trên vào thanh địa chỉ. Bây giờ, quyền truy cập vào ứng dụng của bạn sẽ rất nhanh.

Điều này chỉ để nói rằng miễn là sáng bóng là lên và chạy, các lệnh trong global.R được thực hiện ngay từ đầu và đánh giá của chúng được đặt trong môi trường toàn cầu R. Chúng không được thực hiện bất cứ lúc nào người dùng kết nối với ứng dụng.

Cân nhắc thêm rằng bạn có thể tăng tốc độ tải một số Rdata nếu bạn lưu nó với đối số compress=FALSE. Bằng cách này, tệp của bạn sẽ lớn hơn, nhưng tải nó sẽ nhanh hơn.

+0

Trợ giúp tuyệt vời! Tôi đã thử trải nghiệm dựa trên 'runApp (port = 5050)' và nó hoạt động rất tốt! Nó có thể hiển nhiên nhưng 'session $ onSessionEnded (function() {stopApp()})' không nằm trong 'server.R' để nó hoạt động .... Cảm ơn bạn cũng vì' compress = FALSE': rất hữu ích. – JPL

Các vấn đề liên quan