下面的代码生成一个包含2行和2列的输入表(以简化情况 - 见下图)。基于这些输入,我想生成四个直方图,它们应该与输入框对齐。目前情况并非如此。理想情况下,表的rownames下面应该有一个空格,然后直方图的第一列(第二列)应该在表的第一(第二)列的正下方。
我想到的一个选项是以" matrix_input [i,j]< - hist(rnorm(n),breaks = 10)&#34的形式直接在表格中添加图表#34;,其中" n< - 输入[[paste0(" C",j," _A",i)]]"。这样,他们肯定会对齐。但是我没有管理它,因为我没有成功地使表格接受图表作为元素。第二个选项是使用表格和下面的图表对当前框架进行编码,但要确保它们已正确对齐。
我尝试了许多事情但没有成功。有人可以帮忙吗?任何投入将不胜感激。非常感谢。
library(shiny)
library(grid)
library(gridBase)
u <- shinyUI(navbarPage(
"My Application",
tabPanel("Component 1",
fluidPage(fluidRow(column(6,tableOutput('decision_Matrix'),plotOutput('decision_Matrix_plots')),column(6))
)),
tabPanel("Component 2")
))
s <- shinyServer(
function(input,output) {
output$decision_Matrix <- renderTable({
matrix_input <- matrix(data = NA,nrow = 2,ncol = 2)
for (j in 1:2) {
for (i in 1:2) {
matrix_input[i,j] <- paste0("<input id='C",j,"_A",i,"' type='number' class='form-control shiny-bound-input' value='",input[[paste0("C",j,"_A",i)]],"'>")
}
}
rownames(matrix_input) <- c("alternative1","alternative2")
colnames(matrix_input) <- c("crit1","crit2")
matrix_input
},include.rownames = TRUE,sanitize.text.function = function(x) x)
output$decision_Matrix_plots <- renderPlot({
layout(matrix(c(1,2,3,4),nrow = 2,ncol = 2))
for (j in 1:2) {
for (i in 1:2) {
set.seed(123)
n <- input[[paste0("C",j,"_A",i)]]
if (is.null(n) || is.na(n) || n < 1) n <- 1
hist(rnorm(n),breaks = 10,main=sprintf("histogram of rnorm( %d )",n))
}
}
recordPlot()
})
})
shinyApp(ui = u,server = s)