【问题标题】:Is there a way to load an .Rdata file into R shiny without any input object?有没有办法在没有任何输入对象的情况下将 .Rdata 文件加载到 R Shiny 中?
【发布时间】:2020-04-19 17:39:24
【问题描述】:

我见过很多关于将 .Rdata 文件上传到 R Shiny 的问题,但它们都包含某种输入对象。有没有办法在全局环境中上传它并在应用程序中使用它来创建新对象?不得不说这个 .Rdata 文件是另一个闪亮的应用程序的结果。 这是我尝试过的:

# --------------------------------------- Global --------------------------------------- #

# Set working directory -> Ctrl+Shift+H & Open the app folder
setwd("~/Programación en R/Shiny app/Final dashboard app")

# --------------------- Initialize program --------------------- #

# Print in console: global script is beginning to run
print("global.R")

# Allow specific errors to be displayed on screen, instead of displaying a generic error
options(shiny.sanitize.errors = FALSE)

# Load LDA model outcome, topic names & raw data
load("LDA_output.2019-12-28.RData")

#--------------------------------------- User Interface ---------------------------------------#

# Tell user ui script is beginning to run
print("ui.R")

ui <- fluidPage( 
  theme = shinytheme("cerulean"), 

    DT::dataTableOutput("lili")

) #fluidPage

#--------------------------------------- Server ---------------------------------------#

 server <- function(input, output, session) {

 mod <- reactive({get(load("LDA_output.2019-12-28.RData"))})
 print(mod())
 output$lili <- DT::renderDataTable({
   DT::datatable(as.data.frame(mod()[[1]][3])) #list inside that list

 })
 }
 shinyApp(ui, server)

这是由此产生的错误:

Listening on http://127.0.0.1:6282
Warning: Error in .getReactiveEnvironment()$currentContext: Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)
  58: stop
  57: .getReactiveEnvironment()$currentContext
  56: getCurrentContext
  55: .dependents$register
  54: mod
  52: server [#4]
Error in .getReactiveEnvironment()$currentContext() : 
  Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)

这是我最后使用的服务器功能,

server <- function(input, output, session) {
observe({
print(typeof(mod))})
output$lili <- DT::renderDataTable({
  DT::datatable(as.data.frame(mod[[2]]))

})
}
shinyApp(ui, server)

但还是有问题:

Listening on http://127.0.0.1:6282
[1] "list"
Warning: Error in checkName: Must use single string to index into reactivevalues
  [No stack trace available]

【问题讨论】:

    标签: file-upload shiny shiny-server shinyapps


    【解决方案1】:

    您的错误是由于:

    print(mod())
    

    mod() 是响应式的,需要处于响应式上下文中,例如observe。但我不确定是否有任何理由让您的数据(从 .Rdata 加载)具有反应性。您的第一个“加载”应该使对象可供您使用。

    【讨论】:

    • 开始一个新的 R 会话,并且只加载那个 .Rdata 文件。然后运行ls()。 R 打印出来的对象名称都是从文件中加载的。如果您在脚本顶部加载,所有这些对象都应该可以在您的 hi 和 server 函数中使用。
    • 你还在像mod()那样把它当作一个函数来调用吗?如果是列表,请致电mod
    • 此时,mod 不应该是被动的。这一行应该仍然在你的脚本中,在顶部,load("LDA_output.2019-12-28.RData")。此行应在您的服务器函数中删除:mod &lt;- reactive({get(load("LDA_output.2019-12-28.RData"))})
    • 您的 .Rdata 文件中的 mod 对象是 reactiveValues 列表吗?将typeof(mod) 更改为class(mod) 即可查看。您希望它只是“列表”
    • 这意味着每当您保存原始mod 对象时,它就是reactiveValues 对象。你希望它只是一个普通的列表。
    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多