【发布时间】:2020-05-27 06:18:27
【问题描述】:
我正在创建一个应用程序来跟踪游戏数据并免费分发,因为似乎需要(阅读:想要)这样的东西。该应用程序接受关于应该有多少玩家的初始输入,然后反应性地允许为每个玩家输入数据。然后,我想将所有接收到的数据呈现为一个数据表,可以在下一页下载。
我最近开始模块化我的应用程序以保持整洁。虽然,由于某种原因,我无法让这个工作。我认为这是因为我正在尝试将 renderUI 输入从一个模块传递到下一个模块,但显然不知道该怎么做。
我收到的错误是:
Error in module(childScope$input, childScope$output, childScope, ...) :
object 'player_id' not found
不过,我收到了许多不同的解决方案。
为了记录,我检查了: pass renderUI input from one Shiny module to another
和:https://community.rstudio.com/t/modularizing-an-app-with-dynamic-inputs-renderui/1454
这似乎很接近......
这是一个非常简单的示例,其中包含 app.R 中的模块(否则我将获取它们)。
library(shiny)
######################## -- Data Input Module -- ########################
datatrackingUI <- function(id){
ns <- NS(id)
fluidPage(
column(4, offset = 4,
sliderInput(inputId = ns("players"),
label = "How many players do you have?",
min = 0,
max = 4,
value = 4)),
column(12,
uiOutput(ns("ui_reactive"))
)
)
}
datatracking <- function(input, output, session){
ns <- session$ns
output$ui_reactive <- renderUI({
lapply(seq_len(input$players), function(i){
column(4,
wellPanel(
textInput(inputId = ns("player_id"),
label = paste0("Enter the ID for player ", i),
placeholder = "Brennan")))})
})
df_list <- list(player_id = player_id)
return(df_list)
}
######################## -- Create Data Table Module -- ########################
createTableUI <- function(id){
ns <- NS(id)
fluidPage(
renderUI("some_text_for_now")
)
}
createTable <- function(input, output, sesssion, df_list){
ns <- session$ns
output$some_text_for_now <- renderText({
print(df_list$player_id())
})
}
######################## -- Shiny App -- ########################
ui <- fluidPage(
navbarPage("Game",
tabPanel("Input",
hr(),
datatrackingUI("create_data")),
tabPanel("Table",
hr(),
createTableUI("create_table"))
)
)
server <- function(input, output, session) {
df_list <- callModule(datatracking, "create_data")
callModule(createTable, "create_table", df_list)
}
shinyApp(ui = ui, server = server)
所以,就目前而言,我只是想向自己展示我有来自 renderUI 函数的输出。一旦我可以访问输入,我就可以处理创建数据表/推送到 AWS!
感谢任何帮助!或者,如果你想和我一起做这个项目,那可能会很有趣!给我留言以获取更多信息。
-布伦南
【问题讨论】: