在http://shiny.rstudio.com/articles/scoping.html有光澤範圍的規則很好地解釋。有3個環境或層級相互嵌套:功能內,會話內和所有會話內可用的對象。使用< - 將更改您所處環境中的對象,並且將全局更改它,即所有會話。R Shiny中的環境
如果我在會話中定義了一個變量但想從函數內改變它會怎麼樣?
< - 只會改變它的功能,使其他功能不可讀取,並且< - 將改變它的所有會話。中間沒有什麼?像「只有一級」?
在http://shiny.rstudio.com/articles/scoping.html有光澤範圍的規則很好地解釋。有3個環境或層級相互嵌套:功能內,會話內和所有會話內可用的對象。使用< - 將更改您所處環境中的對象,並且將全局更改它,即所有會話。R Shiny中的環境
如果我在會話中定義了一個變量但想從函數內改變它會怎麼樣?
< - 只會改變它的功能,使其他功能不可讀取,並且< - 將改變它的所有會話。中間沒有什麼?像「只有一級」?
謝謝你的參考Stephane。如果在shinyServer()之前定義了一個對象,然後使用< - 在shinyServer()中的任何位置將更改該應用的所有實例的值。如果該對象在shinyServer()中定義,那麼< - (函數內部或外部)只會更改該應用程序實例的值。
我把一個小應用程序與一個計數器和實例ID來測試這個。運行應用程序的兩個實例以及它們之間的切換增加計數演示< <效果 -
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
感謝您的「小應用」。在不同的地方看到<<的不同效果是非常有用的。 –
我認爲(不確定)這句話的措辭不是很好,「<< - 」意思是「一層一層」。 –
你的意思是說,在一個函數內使用<< - 應該改變函數和閃亮的會話中的變量,但不是一成不變的,即對於所有閃亮的會話?這不符合我的(小)經驗。我將有一個更詳細的外觀/實驗,並在這裏發佈結果。 – steinbock
'<< - '不代表「全球」,而是「非本地」。請閱讀Yihui Xie在[本次討論]中的評論(https://groups.google.com/d/topic/shiny-discuss/sqo6Ve_kveo/discussion) –