Я создаю приложение для отслеживания игровых данных и распространяю его бесплатно, поскольку, похоже, в этом есть потребность (читай: хочу). Приложение сначала вводит, сколько игроков должно быть, а затем реактивно разрешает ввод данных для каждого игрока. Затем я хочу представить все полученные данные в виде таблицы данных, которую можно загрузить на следующей странице.
Недавно я начал модульную разбивку своих приложений для обеспечения чистоты. Хотя по какой-то причине я не могу заставить это работать. Я думаю, это потому, что я пытаюсь передать входные данные renderUI от одного модуля к другому и явно не знаю, как это сделать .
Я получаю следующее сообщение об ошибке:
Error in module(childScope$input, childScope$output, childScope, ...) :
object 'player_id' not found
Тем не менее, я получил много разных ошибок в попытке исправить.
Для записи, я проверил: передать ввод renderUI из одного модуля Shiny в другой
и: 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. Я могу справиться с созданием datatable / нажатием на AWS, как только я получу доступ к входам!
Любая помощь приветствуется! Или, если вы хотите поработать со мной над проектом, это может быть весело! Напишите мне для получения дополнительной информации.
-Бреннан