【问题标题】:R Shiny - create global data frame at start of appR Shiny - 在应用程序启动时创建全局数据框
【发布时间】:2015-12-02 22:25:02
【问题描述】:

我正在构建一个闪亮的应用程序,我需要重建一个数据框,每次应用程序打开时都会解析一个 json 文件(因为 json 文件会改变)。然后,应用程序中的函数将需要访问此数据框。将代码放在 server.R 前面实际上并没有创建数据框。另一种方法是创建一个创建数据框的函数,并在每次需要数据框时调用该函数,但每次需要时都会重新创建数据框。

有没有一种方法可以创建一次数据框,并将其保存在一个变量名中,以便在需要时由应用程序的其余部分中的函数访问?

现在我在 server.R 中的代码遵循以下结构。但是,这里永远不会调用填充 myDF 的 for 循环。另一方面,我不想把它放在每次我需要 myDF 时调用的函数中,每次都重新创建它。我只想在应用程序启动时创建 myDF,并将其保存为 myDF 以便我可以使用它。

json_file <- "file.json"
json_data <- fromJSON(json_file)
myDF <- as.data.frame(ncol = ..., nrow = ...) #creates an empty data frame myDF

for (b in field_names) {
    #code that fills in myDF
}

myFunc <- function(inputs) {
    #a function that uses myDF
}

shinyServer(function(input, output, session) {

  output$out1 <-renderText({
      myFunc(input$inputs)
  })
}

【问题讨论】:

    标签: json r shiny


    【解决方案1】:

    将以下内容放入应用目录中名为global.R 的文件中(与server.Rui.R 相同),它将在应用初始化时运行一次。

    json_file <- "file.json"
    json_data <- fromJSON(json_file)
    myDF <- as.data.frame(ncol = ..., nrow = ...) #creates an empty data frame myDF
    
    for (b in field_names) {
        #code that fills in myDF
    }
    

    【讨论】:

    • 当闪亮是从 rmarkdown 文件构建时,有没有办法使用global.R?没有ui.Rserver.R,只有一个.Rmd 文件,它带有一个yaml 标头而不是定义闪亮的(runtime: shiny_prerendered)。我在同一个目录中有一个global.R,但它不起作用。我的目标是在闪亮启动时加载数据框。
    • @demarsylvain 只需将myDF &lt;- as.data.frame(...) 放在文档开头的代码块中。
    • 我将df &lt;- fread(".....") 放在.Rmd 的第一个块中,但是当我尝试在其他块中使用df 时,出现错误“找不到对象df”...跨度>
    • @demarsylvain 你在缓存那个代码块吗?如果是这样,请删除缓存
    猜你喜欢
    • 1970-01-01
    • 2020-02-13
    • 2018-05-27
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多