【发布时间】:2021-04-14 08:24:39
【问题描述】:
我试图让用户输入一个数字输入,然后生成与第一个数字输入相等的输入框数量。然后我想找到对这些辅助数字输入的响应的总和。但是,我无法以全面的方式访问这些变量,因为它们的名称是使用数字变量创建的。现在当我运行它时,我得到这个错误:
Warning: Error in get: object 'inp21' not found
谢谢
library(shiny)
ui <- fluidPage(
# Application title
titlePanel("Test"),
sidebarLayout(
sidebarPanel(
numericInput("inp1",
"Enter num:",1)
),
mainPanel(
uiOutput("more_inp"),
textOutput("num_inps")
)
)
)
server <- function(input, output) {
counter <- reactiveValues(countervalue = 0)
counter2 <- reactiveValues(counter2value = 0)
output$more_inp <- renderUI({
#Generates number of numeric inputs equal to original numeric input
mylist <- lapply(1:input$inp1, function(i) {
inp_identifier <- paste("inp2", i, sep="")
inp_name<- paste("Input2",i,sep=" ")
list(
numericInput(inp_identifier,inp_name, 5)
)
})
do.call(tagList, unlist(mylist, recursive = FALSE))
})
#Display number of secondary inputs
#Count number of secondary inputs
observeEvent(input$inp1, {
counter$countervalue <- counter$countervalue + 1
})
#Find sum of secondary inputs
output$num_inps<-renderText(input$inp1)
observeEvent(input$inp1,{
for (i in 1:counter$countervalue) {
counter2$counter2value <- counter2$counter2value + get(paste("inp2", i, sep=""))
print(counter2$counter2value)
}
})
}
运行应用程序
shinyApp(ui = ui, server = server)
【问题讨论】:
-
尝试用
input[[paste("inp2", i, sep="")]]替换get(paste("inp2", i, sep=""))。 -
解释:如果它是预定义的,你会将它引用为
input$inp21或input[["inp21"]],而不是get("inp21")。 -
@r2evans 谢谢!我试过了,现在它将 print(counter2$counter2value) 的值打印为 numeric(0)。你知道这里发生了什么吗?谢谢
-
@r2evans BTW,numeric(0) 指的是长度为 0 的数字向量。
-
请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?
标签: r loops user-interface input shiny