在 R Shiny 中根据用户输入动态创建图像和表格
Dynamically Creating Images And Tables From User Input In R Shiny
我正在尝试在 R Shiny 中开发我的第一个应用程序,但到目前为止,我发现的示例一直在展示如何使用专有数据集(如 carot 或 mtcars),而不是如何有效地将数据加载到R 闪亮加工。
我想要做的是让 R shiny 根据用户的输入创建和加载不同的数据集,然后将该数据集显示为 table 并伴随可视化。
目前我尝试解决这个问题的方法列在下面的代码块中。 CreateSnapshot 和 ProduceTable 是用户定义的数据预处理函数,它们很长并且工作正常。
CreateSnapshot 正在提取原始数据并将其保存为 CSV。 ProduceTable 加载由 CreateSnapshot 创建的 CSV 并创建摘要 tables 和一个图形,然后在本地保存为 CSV 和 WMF分别
当我尝试 运行 应用程序时,服务器中的许多行试图加载摘要 table 并呈现它 运行。我似乎也无法让 R Shiny 加载由用户输入生成的 WMF。我试图用来渲染图像的代码已被删除,并且没有出现在下面的代码块中:
# Define UI for dataset viewer app ----
ui <- fluidPage(
# App title ----
titlePanel("FirstApp"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Text for providing a caption ----
# Note: Changes made to the caption in the textInput control
# are updated in the output area immediately as you type
# Input: Selector for choosing dataset ----
selectInput(inputId = "dis",
label = "Choose a discipline:",
choices = c("Choice 1", "Choice 2", "Choice 3")),
),
# Main panel for displaying outputs ----
mainPanel(
# Output: HTML table attempts ----
tableOutput("view"),
tableOutput("statstable"),
tableOutput("VisData"),
tableOutput("fileData"),
imageOutput("preImage")
)
)
)
# Define server logic to summarize and view selected dataset ----
server <- function(input, output) {
#Creating Base Dataset
Snapshot<-reactive({CreateSnapshot(input$dis)})
#Creating Summary Dataset
VisualizationTable<-reactive({ProduceTable(input$dis)})
#Attempting to create file from CSV files generated above.
fileData <- reactive({reactiveFileReader(1000, NULL, paste( input$dis, date.of.data,
"FilenameBoilerPlate.csv"), read.csv)})
VisData<-renderDataTable(read.csv(paste( input$dis, date.of.data,
"FileNameBoilerPlate.csv"), read.csv)))
#Attempting to create outputs for viewing. I have discovered that the first two allow for my user defined functions to run and create all of the files I need.
output$view <- renderTable({
head(Snapshot())
})
output$statstable <- renderTable({
head(VisualizationTable())
})
output$fileData <- renderTable({
fileData()
})
#Creating Image
output$preImage <- renderImage({
# When input$n is 3, filename is ./images/image3.jpeg
filename <- normalizePath(file.path('./images', paste(input$dis, date.of.data,
"Superbarplot.wmf", sep=' ')))
# Return a list containing the filename and alt text
list(src = filename,
alt = paste("Image Discipline", input$dis))
}, deleteFile = FALSE)
}
# Create Shiny app ----
shinyApp(ui, server)
如有任何关于如何进行的想法,我们将不胜感激。
我会通过将您正在做的所有事情包装在一个 observeEvent 函数中来解决这个问题。我不认为响应式是尝试让你的函数达到 运行 的自然方式,因为它们更多的是在需要时返回 运行s 的 R 对象输出。
类似于:
observeEvent(输入$dis,
{
快照 <- CreateSnapshot(input$dis)
VisualizationTable <- ProduceTable(input$dis)
fileData <- 您选择的读取函数,因为它不再需要反应
output$fileData <- renderTable({
文件数据
})
等..
}
)
所以每次用户选择一门学科时,整个事情都会 运行,生成你想要的输出。
如果您没有理由想要生成 csv,您可以通过不保存 csv 来进一步简化此过程,因为您保存它只是为了读取文件以加载它。
我正在尝试在 R Shiny 中开发我的第一个应用程序,但到目前为止,我发现的示例一直在展示如何使用专有数据集(如 carot 或 mtcars),而不是如何有效地将数据加载到R 闪亮加工。
我想要做的是让 R shiny 根据用户的输入创建和加载不同的数据集,然后将该数据集显示为 table 并伴随可视化。
目前我尝试解决这个问题的方法列在下面的代码块中。 CreateSnapshot 和 ProduceTable 是用户定义的数据预处理函数,它们很长并且工作正常。
CreateSnapshot 正在提取原始数据并将其保存为 CSV。 ProduceTable 加载由 CreateSnapshot 创建的 CSV 并创建摘要 tables 和一个图形,然后在本地保存为 CSV 和 WMF分别
当我尝试 运行 应用程序时,服务器中的许多行试图加载摘要 table 并呈现它 运行。我似乎也无法让 R Shiny 加载由用户输入生成的 WMF。我试图用来渲染图像的代码已被删除,并且没有出现在下面的代码块中:
# Define UI for dataset viewer app ----
ui <- fluidPage(
# App title ----
titlePanel("FirstApp"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Text for providing a caption ----
# Note: Changes made to the caption in the textInput control
# are updated in the output area immediately as you type
# Input: Selector for choosing dataset ----
selectInput(inputId = "dis",
label = "Choose a discipline:",
choices = c("Choice 1", "Choice 2", "Choice 3")),
),
# Main panel for displaying outputs ----
mainPanel(
# Output: HTML table attempts ----
tableOutput("view"),
tableOutput("statstable"),
tableOutput("VisData"),
tableOutput("fileData"),
imageOutput("preImage")
)
)
)
# Define server logic to summarize and view selected dataset ----
server <- function(input, output) {
#Creating Base Dataset
Snapshot<-reactive({CreateSnapshot(input$dis)})
#Creating Summary Dataset
VisualizationTable<-reactive({ProduceTable(input$dis)})
#Attempting to create file from CSV files generated above.
fileData <- reactive({reactiveFileReader(1000, NULL, paste( input$dis, date.of.data,
"FilenameBoilerPlate.csv"), read.csv)})
VisData<-renderDataTable(read.csv(paste( input$dis, date.of.data,
"FileNameBoilerPlate.csv"), read.csv)))
#Attempting to create outputs for viewing. I have discovered that the first two allow for my user defined functions to run and create all of the files I need.
output$view <- renderTable({
head(Snapshot())
})
output$statstable <- renderTable({
head(VisualizationTable())
})
output$fileData <- renderTable({
fileData()
})
#Creating Image
output$preImage <- renderImage({
# When input$n is 3, filename is ./images/image3.jpeg
filename <- normalizePath(file.path('./images', paste(input$dis, date.of.data,
"Superbarplot.wmf", sep=' ')))
# Return a list containing the filename and alt text
list(src = filename,
alt = paste("Image Discipline", input$dis))
}, deleteFile = FALSE)
}
# Create Shiny app ----
shinyApp(ui, server)
如有任何关于如何进行的想法,我们将不胜感激。
我会通过将您正在做的所有事情包装在一个 observeEvent 函数中来解决这个问题。我不认为响应式是尝试让你的函数达到 运行 的自然方式,因为它们更多的是在需要时返回 运行s 的 R 对象输出。
类似于:
observeEvent(输入$dis, { 快照 <- CreateSnapshot(input$dis)
VisualizationTable <- ProduceTable(input$dis)
fileData <- 您选择的读取函数,因为它不再需要反应
output$fileData <- renderTable({ 文件数据 })
等..
} )
所以每次用户选择一门学科时,整个事情都会 运行,生成你想要的输出。
如果您没有理由想要生成 csv,您可以通过不保存 csv 来进一步简化此过程,因为您保存它只是为了读取文件以加载它。