我有多个具有多个 session 的Shiny应用程序,并且我希望有一个全局变量,但只能跨每个 session ,而不能覆盖不同 session 之间的值。由于这一要求,我无法使用<<-赋值运算符。

我需要它的原因是我有多个源函数正在使用的几个变量,并且我不想将它们作为参数发送给所有函数。

关于如何做到这一点的任何想法?

编辑

我创建了一个简单的示例来更好地解释我的问题。
假设这是我的server.R文件:

shinyServer(function(input, output, session) {
  source('shinyCommons.R')
  reportId <<- generateReportID()
  createLogFile()
})

这是包含非 react 性函数shinyCommons.R函数文件:
createLogFile <- function()
{
  system(paste(touch,reportId,".log",sep=""))
}

现在的问题是,如果我使用<<-运算符,并且不同的 session 同时处于事件状态,则它们会覆盖彼此的reportID值。
但是,如果我将其放在reactive上下文中,则非 react 性函数将无法达到它。

有人可以帮助我了解如何设计吗?
顺便说一句-我知道我可以将其作为函数的参数发送,但这只是一个小例子,我有很多var和很多使用它们的函数

最佳答案

显然,我赢得了赌注:您使用的<<-运算符不正确。这是一个工作示例。

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")
    })
})

运行该应用程序时,请打开几个 session 。每次按下按钮,您都应该在 shell 上看到计数器。您会看到计数器未共享。公用对象在shinyServer的函数参数的范围内定义。然后,在其他函数/响应上下文中,可以使用<<-更新/覆盖值。

关于r - 仅在Shiny中具有 "global"变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36746582/

10-12 12:29
查看更多