首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闪亮:动态加载.RData文件

闪亮:动态加载.RData文件
EN

Stack Overflow用户
提问于 2016-02-05 23:45:36
回答 2查看 2.2K关注 0票数 2

我使用using作为一个接口来查看存储在一系列.RData文件中的本地表,但是无法使表呈现。

我的server代码如下:

代码语言:javascript
复制
output$table1 <- renderTable({
load(paste0(input$one,"/",input$two,".RData"))
myData})

ui方面,我只是简单地在主面板中显示表。

This other SO question建议,问题是数据被加载到的环境消失了,所以数据不需要显示。他们建议创建一个global文件并在其中加载.RData文件,但我不相信我能够以这种方式动态加载数据。任何关于如何在.RData中有效地使用shiny文件的指导都将不胜感激。

问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-06 00:12:40

我认为您只需要将load语句移出renderTable函数。所以你应该

代码语言:javascript
复制
load(paste0(input$one,"/",input$two,".RData"))
output$table1 <- renderTable({myData})

如果您查看renderTable的帮助文件,第一个参数是

expr:返回一个可以与xtable一起使用的R对象的表达式。

load不返回这个。

票数 1
EN

Stack Overflow用户

发布于 2017-09-05 20:50:39

我通过“欺骗”R闪亮来解决这件事。我制作了一个假的textOutput,在renderText中调用一个外部函数,该函数基于所选的输入,将已经全局加载的环境设置为一个称为"e“的环境。注意,必须首先使用这种方法将所有RDatas手动加载到global.R中的环境中。假设您的数据不是那么大,或者您没有一百万RDatas,这似乎是一个合理的攻击。

通过创建如下所示的loadEnvFn(),返回作为input$datasetNumber传递的字符串输入,可以避免在将代码放入反应性({})上下文时出现的范围界定问题。我试着做了很多事情,但它们都需要被动的环境。这样,我就可以更改加载在e中的对象,而不必将反应性({})作用域封装在我闪亮的服务器代码周围。

代码语言:javascript
复制
#Global Environment Pre-loaded before Shiny Server
e = new.env()
dataset1 = new.env()
load("dataset1.RData", env=dataset1)
dataset2 = new.env()
load("dataset2.RData", env=dataset2)
dataset3 = new.env()
load("dataset3.RData", env=dataset3)


ui = fluidPage(
  # Application title
  titlePanel(title="View Datasets"),

  sidebarLayout(
    # Sidebar panel
    sidebarPanel(width=3, radioButtons(inputId = "datasetNumber", label = "From which dataset do you want to display sample data?", choices = list("Dataset1", "Dataset2", "Dataset3"), selected = "Dataset2")
    ),

    # Main panel
    mainPanel(width = 9, 
      textOutput("dataset"), # Bogus textOutput
      textOutput("numInEnv")
    )
  )
)

loadEnvFn = function(input) {
  if (input$datasetNumber=="Dataset1") { 
    .GlobalEnv$e = dataset1
  } else if (input$datasetNumber=="Dataset2") { 
    .GlobalEnv$e = dataset2
  } else { 
    .GlobalEnv$e = dataset3
  }
  # Bogus return string unrelated to real purpose of function loadEnvFn
  return(input$datasetNumber) 
}

server = function(input, output, session) {
  output$dataset = renderText(sprintf("Dataset chosen was %s", loadEnvFn(input)))         # Bogus output
  output$numInEnv = renderText(sprintf("# objects in environment 'e': %d", length(ls(e))))
}


shinyApp(ui, server)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35235435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档