[英]Having a “global” variable only for session in Shiny
我有多個Shiny應用程序有多個會話,我想有一個全局變量,但只在每個會話中,不要覆蓋不同會話之間的值。 由於這個要求,我不能使用<<-
賦值運算符。
我需要它的原因是,我有一個正在使用的許多功能源自幾個變量,我不想送他們作為參數傳遞給所有的功能。
有關如何做到這一點的任何想法?
編輯
我創建了一個簡單的例子來更好地解釋我的問題。 假設這是我的server.R
文件:
shinyServer(function(input, output, session) {
source('shinyCommons.R')
reportId <<- generateReportID()
createLogFile()
})
這是包含非反應函數的shinyCommons.R
函數文件:
createLogFile <- function()
{
system(paste(touch,reportId,".log",sep=""))
}
現在的問題是,如果我使用<<-
運算符,並且不同的會話同時處於活動狀態,它們會覆蓋彼此的reportID
值。 但是如果我把它置於reactive
環境中,那么非反應函數就無法達到它。
有人可以幫助我理解我應該如何設計它? 順便說一句 - 我知道我可以把它作為一個參數去的功能,但是這只是一個小例子,我有很多的變量和加了很多的功能,使用它們
顯然,我贏了賭注:你錯誤地使用<<-
運算符。 這是一個有效的例子。
在ui.R
:
barraLaterale<-sidebarPanel(
fluidRow(column(numericInput("numObs",label="Num Obs.",value=10000,min=100,step=1),width=6),column(helpText("Something"),actionButton("Bottone",label="Go!"),width=6)),
sliderInput("media",label="Pick gaussian mean",min=-50,max=50,value=0),
sliderInput("varianza",label="Pick gaussian standard deviation",min=0,max=10,value=5)
)
principale<-mainPanel(plotOutput("plotRisultato"),plotOutput("plotEsatto"))
shinyUI(fluidPage(
titlePanel("Applicazione Prova"),
sidebarLayout(barraLaterale,principale)
))
在server.R
:
shinyServer(function(input, output) {
#HERE WE DEFINE COMMON OBJECTS
object<-0
calcolaIstogramma<-reactive({
rnorm(input$numObs,input$media,input$varianza)
})
output$plotRisultato<-renderPlot({
a<-input$Bottone
variabile<-isolate(calcolaIstogramma())
hist(variabile,breaks=50,col="blue")
})
output$plotEsatto<-renderPlot({
a<-input$Bottone
variabile<-isolate(calcolaIstogramma())
#HERE WE ARE UPDATING THE VALUES
object<<-object+1
cat(object,"\n")
plot(variabile,xlab="Variable trace",ylab="",ty="l")
})
})
運行應用程序時打開幾個會話。 每次按下按鈕,都應該看到外殼上的計數器。 您可以看到計數器未共享。 公共對象在shinyServer
的function參數范圍內定義。 然后,在其他函數/反應上下文中,您可以使用<<-
來更新/覆蓋值。
您是否嘗試在采購時使用local
選項?
這應該工作:
shinyServer(function(input, output, session) {
source('shinyCommons.R', local=TRUE)
reportId <- generateReportID()
createLogFile()
})
請注意,您應該使用< - 而不是<< - 來保持變量在本地環境中(因此在會話中保持獨立)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.