2014-05-01 26 views
6

Tại http://shiny.rstudio.com/articles/scoping.html các quy tắc cho phạm vi sáng bóng được giải thích rõ. Có 3 môi trường hoặc các mức được lồng vào nhau: các đối tượng có sẵn trong một hàm, trong một phiên và trong tất cả các phiên. Sử dụng < - sẽ thay đổi đối tượng trong môi trường bạn đang ở và < < - sẽ thay đổi đối tượng đó trên toàn cầu, tức là cho tất cả các phiên.Môi trường trong R Sáng bóng

Điều gì sẽ xảy ra nếu tôi xác định biến trong phiên nhưng muốn thay đổi biến trong một hàm?

< - sẽ chỉ thay đổi trong chức năng để không thể đọc được bởi các chức năng khác và < < - sẽ thay đổi nó cho tất cả các phiên. Không có gì không có gì? Giống như "chỉ một cấp lên"?

+0

Tôi nghĩ (không chắc chắn) câu này không được diễn đạt tốt và "<< -" có nghĩa là "một cấp". –

+0

Bạn có nghĩa là việc sử dụng << - trong một hàm có nghĩa vụ phải thay đổi biến trong hàm và phiên sáng bóng nhưng không phải là hoàn toàn cho tất cả các phiên sáng bóng? Điều này không gắn liền với kinh nghiệm (ít) của tôi. Tôi sẽ có một cái nhìn/thử nghiệm chi tiết hơn và đăng kết quả ở đây. – steinbock

+1

'<< -' không có nghĩa là "toàn cầu" nhưng "không phải là địa phương". Đọc ý kiến ​​của Yihui Xie trong [thảo luận này] (https://groups.google.com/d/topic/shiny-discuss/sqo6Ve_kveo/discussion) –

Trả lời

7

Cảm ơn bạn đã tham khảo Stephane. Nếu một đối tượng được định nghĩa trước khi shinyServer() sau đó sử dụng < < - bất kỳ nơi nào trong shinyServer() sẽ thay đổi giá trị cho tất cả các phiên bản của ứng dụng. Nếu đối tượng được xác định trong shinyServer() thì < < - (bên trong hoặc bên ngoài một hàm) sẽ chỉ thay đổi giá trị cho trường hợp đó của ứng dụng.

Tôi kết hợp một ứng dụng nhỏ với số lượt truy cập và id mẫu để kiểm tra điều này. Chạy hai trường hợp của ứng dụng và chuyển đổi giữa chúng tăng số lượng cho thấy ảnh hưởng của < < -

ui.r

library(shiny) 

shinyUI(pageWithSidebar(

    headerPanel("Testing Environments"), 

    sidebarPanel(


    actionButton("increment_counter", "Increase Count") 


), 

    mainPanel(

    tabsetPanel(
     tabPanel("Print", verbatimTextOutput("text1")) 


    )) 

)) 

server.r

instance_id<-1000 

shinyServer(function(input, output, session) { 

    instance_id<<-instance_id+1 
    this_instance<-instance_id 

    counter<-0 


    edit_counter<-reactive({ 

    if(input$increment_counter>counter){ 
    counter<<-counter+1 
    } 

    list(counter=counter) 

    }) 



    output$text1 <- renderPrint({ 
    cat(paste("Session ID: ",Sys.getpid()," \n")) 
    cat(paste("Global Instance ID: ",instance_id," \n")) 
    cat(paste("This Instance ID: ",this_instance," \n")) 
    cat(paste("Button Value: ",input$increment_counter," \n")) 
    cat(paste("Counter Value: ",edit_counter()$counter," \n")) 


    }) 



}) # end server function 
+0

Cảm ơn vì 'ứng dụng nhỏ' của bạn. Nó khá hữu ích khi thấy các hiệu ứng khác nhau của << - ở những nơi khác nhau. –

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