闪亮的初学者在这里!我正在尝试创建一个应用程序,用户可以在其中输入动态数量的 8 位代码。首先他们输入他们喜欢的代码数量,然后使用renderUI,生成了很多槽。
我想使用 ShinyFeedback 检查每个插入代码的 nchar,如果它不是 8 位数字,则显示警告。这就是我迄今为止所做的:
code_check <- reactive({
lapply(1:input$numInputs, function(i) {
shinyFeedback::feedbackWarning(input$inputName,
nchar(input$inputName) != 8,
"Your code needs to be 8 digits!")
}
)
})
我无法通过他们的 id 访问各个输入。input$inputName 在 renderUI 部分生成:
observeEvent(input$numInputs, {
output$inputGroup = renderUI({
input_list <- lapply(1:input$numInputs, function(i) {
# for each dynamically generated input, give a different name
inputName <- paste("Code ", i, sep = " ")
# generate the input field, the inputID = label, initial value is 12345678
textInput(inputName, inputName, "12345678")
})
})
})
运行此代码会出现以下错误:Warning: Error in feedback: is.character(inputId) is not TRUE
在下面完成当前代码:
library(shiny)
ui <- shinyUI(fluidPage(
shinyFeedback::useShinyFeedback(),
titlePanel("As many 8 digit codes as you like"),
sidebarLayout(
sidebarPanel(
numericInput("numInputs", "How many codes would you like to insert?", 4),
# place to hold dynamic inputs
uiOutput("inputGroup")
),
mainPanel(textOutput("inputValues"),
textOutput("final"),
textOutput("code_check")
)
)
))
server <- shinyServer(function(input, output) {
# observe changes in "numInputs", and create corresponding number of inputs
observeEvent(input$numInputs, {
output$inputGroup = renderUI({
input_list <- lapply(1:input$numInputs, function(i) {
# for each dynamically generated input, give a different name
inputName <- paste("Code ", i, sep = " ")
# generate the input field, the inputID = label, initial value is 12345678
textInput(inputName, inputName, "12345678")
})
})
})
code_check <- reactive({
lapply(1:input$numInputs, function(i) {
shinyFeedback::feedbackWarning(input$inputName,
nchar(input$inputName) != 8,
"Your code needs to be 8 digits!")
}
)
})
output$code_check <- renderPrint({code_check()})
test <- reactive({
paste(lapply(1:input$numInputs, function(i) {
inputName <- paste("Code ", i, sep = " ")
input[[inputName]]
}))
})
output$final <- renderPrint({test()})
observe({
assign(
x = "inserted_codes",
value = test(),
envir = .GlobalEnv
)
})
})
shinyApp(ui, server)
将不胜感激任何想法:)