当运行下面的MWE代码时,用户可以添加、删除或修改输入矩阵网格中的条目。从这些用户输入生成一个简单的图。
您将看到输入矩阵的默认列标头为1和2。但是,当用户向矩阵中添加数据时(只需单击空列并输入值),如何为新列自动生成顺序列标头呢?因此,添加的第三列的标题标签为3,等等。删除列(通过单击"x";(当前显示在列标头字段中)将导致为其余列生成新的顺序列编号。
注意,通过将下面的matrixInput
列(col
)规范更改为editableNames = TRUE
,用户就可以手动输入列标头。但是,如果自动生成编号的头并将editableNames
设置为FALSE,那就好得多了。这些列标头编号将在其他计算中使用。
兆瓦代码:
library(shiny)
library(shinyMatrix)
m <- matrix(runif(2), 1, 2, dimnames = list(c("Sample values"), c(1,2)))
ui <- fluidPage(
titlePanel("Matrix inputs"),
sidebarPanel(
width = 6,
matrixInput(
"sample",
value = m,
rows = list(extend = FALSE),
cols = list(extend = TRUE, names = TRUE, editableNames = FALSE, delete = TRUE),
class = "numeric"
)
),
mainPanel(
width = 6,
plotOutput("scatter")
)
)
server <- function(input, output, session) {
output$scatter <- renderPlot({
plot(1:ncol(input$sample),
input$sample,
xlab="Nbr of samples",
ylab="Sample values"
)
})
}
shinyApp(ui, server)
observe
服务器的输入矩阵的变化。- 改变矩阵
input$sample
给出的colnames
。我在这里简单地使用了连续的数字,但是你可以提供任何你想要的算法。 - 用
updateMatrixInput
将新矩阵发送回UI。确保您使用isolate
,以避免无休止的更改和刷新循环。
library(shiny)
library(shinyMatrix)
initm <- matrix(runif(2), 1, 2, dimnames = list(c("Sample values"), c(1,2)))
ui <- fluidPage(
titlePanel("Matrix inputs"),
sidebarPanel(
width = 6,
matrixInput(
"sample",
value = initm,
rows = list(extend = FALSE),
cols = list(extend = TRUE, names = TRUE, editableNames = FALSE, delete = TRUE),
class = "numeric"
)
),
mainPanel(
width = 6,
plotOutput("scatter")
)
)
server <- function(input, output, session) {
observe({
mm <- input$sample
colnames(mm) <- 1:ncol(mm)
isolate(
updateMatrixInput(session, "sample", mm)
)
})
output$scatter <- renderPlot({
plot(1:ncol(input$sample),
input$sample,
xlab="Nbr of samples",
ylab="Sample values"
)
})
}
shinyApp(ui, server)