所以几天前我问过以下问题R Shiny Dynamic Input,虽然答案是正确的,但我现在想详细说明一下,因为我无法编辑给出的代码来回答我的问题。题。所以最初我希望能够要求用户指定一个数字,比如k,然后动态生成k字段供用户填写。现在,给出的代码假定输出是数字,但是,我希望用户能够在1,...,k字段的每一个中指定5个值的向量。因为,在指定k之后,输入将是数值长度为5的k个向量,我希望能够将这些值存储在k×5矩阵中。这样我可以使用这些值来稍后进行数据处理。如果有帮助,这里是原始答案的代码:
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
numericInput("numInputs", "How many inputs do you want", 4),
# place to hold dynamic inputs
uiOutput("inputGroup")
),
# this is just a demo to show the input values
mainPanel(textOutput("inputValues"))
)
))
# Define server logic required to draw a histogram
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("input", i, sep = "")
numericInput(inputName, inputName, 1)
})
do.call(tagList, input_list)
})
})
# this is just a demo to display all the input values
output$inputValues <- renderText({
paste(lapply(1:input$numInputs, function(i) {
inputName <- paste("input", i, sep = "")
input[[inputName]]
}))
})
})
# Run the application
shinyApp(ui = ui, server = server)
以下是仍然无法完成的更新代码:
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
numericInput("numInputs", "How many inputs do you want", 4),
# place to hold dynamic inputs
uiOutput("inputGroup")
),
# this is just a demo to show the input values
mainPanel(tableOutput("inputValues"))
)
))
# Define server logic required to draw a histogram
server <- shinyServer(function(input, output) {
# observe changes in "numInputs", and create corresponding number of inputs
observeEvent(input$numInputs, {
output$inputValues <- renderTable({
all <- paste(lapply(1:input$numInputs, function(i) {
inputName <- paste("input", i, sep = "")
input[[inputName]]
}))
matrix <- as.matrix(all, ncol=5)
as.data.frame(matrix)
})
})
# this is just a demo to display all the input values
output$inputValues <- renderText({
paste(lapply(1:input$numInputs, function(i) {
inputName <- paste("input", i, sep = "")
input[[inputName]]
}))
})
})
# Run the application
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
您只需进行一些更改:
$(document).ready(function() {
$('a,input').bind('touchend', function() {});
});
更改为mainPanel(textOutput("inputValues"))
(这不是必需的,它只是以表格/矩阵格式显示值,以便您可以看到它们)mainPanel(tableOutput("inputValues"))
更改为numericInput(inputName, inputName, 1)
将textInput(inputName, inputName, "1 2 3 4 5")
更改为
output$inputValues <- renderText({......
output$inputValues <- renderTable({
all <- paste(lapply(1:input$numInputs, function(i) {
inputName <- paste("input", i, sep = "")
input[[inputName]]
}))
matrix = as.matrix(read.table(text=all))
data.frame(matrix)
})
就是你想要的:一个k乘5矩阵。
请注意,我没有进行任何输入验证。假设用户将在每个输入中输入由空格分隔的5个数字。如果他们不这样做,输出可能是错误的,或者您会看到错误。您可能需要在此处实施一些输入检查以确保它是5个数字而不是其他任何内容。
完整代码
matrix