我使用using作为一个接口来查看存储在一系列.RData文件中的本地表,但是无法使表呈现。
我的server代码如下:
output$table1 <- renderTable({
load(paste0(input$one,"/",input$two,".RData"))
myData})在ui方面,我只是简单地在主面板中显示表。
This other SO question建议,问题是数据被加载到的环境消失了,所以数据不需要显示。他们建议创建一个global文件并在其中加载.RData文件,但我不相信我能够以这种方式动态加载数据。任何关于如何在.RData中有效地使用shiny文件的指导都将不胜感激。
问候
发布于 2016-02-06 00:12:40
我认为您只需要将load语句移出renderTable函数。所以你应该
load(paste0(input$one,"/",input$two,".RData"))
output$table1 <- renderTable({myData})如果您查看renderTable的帮助文件,第一个参数是
expr:返回一个可以与xtable一起使用的R对象的表达式。
load不返回这个。
发布于 2017-09-05 20:50:39
我通过“欺骗”R闪亮来解决这件事。我制作了一个假的textOutput,在renderText中调用一个外部函数,该函数基于所选的输入,将已经全局加载的环境设置为一个称为"e“的环境。注意,必须首先使用这种方法将所有RDatas手动加载到global.R中的环境中。假设您的数据不是那么大,或者您没有一百万RDatas,这似乎是一个合理的攻击。
通过创建如下所示的loadEnvFn(),返回作为input$datasetNumber传递的字符串输入,可以避免在将代码放入反应性({})上下文时出现的范围界定问题。我试着做了很多事情,但它们都需要被动的环境。这样,我就可以更改加载在e中的对象,而不必将反应性({})作用域封装在我闪亮的服务器代码周围。
#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)https://stackoverflow.com/questions/35235435
复制相似问题