这与old question有关在动态尺寸的闪亮应用中创建矩阵式输入有关。我的目标是建立一个数字输入矩阵(其大小由其他用户输入确定),然后将该矩阵传递给其他R命令并从这些计算中打印一些输出。我有成功执行所有操作的代码,只是我只能将用户输入作为字符访问。
这是一个设置输入的示例,只是从矩阵打印几个单元格(这样可以正常工作,但不是我需要的):
shiny::runApp(list(
ui = pageWithSidebar(
headerPanel("test"),
sidebarPanel(
numericInput(inputId = "nrow",
label = "number of rows",
min = 1,
max = 20,
value = 1),
numericInput(inputId = "ncol",
label = "number of columns",
min = 1,
max = 20,
value = 1)
),
mainPanel(
tableOutput("value"),
uiOutput("textoutput"))
),
server = function(input,output){
isolate({
output$value <-renderTable({
num.inputs.col1 <- paste0("<input id='r", 1:input$nrow, "c", 1, "' class='shiny-bound-input' type='number' value='1'>")
df <- data.frame(num.inputs.col1)
if (input$ncol >= 2){
for (i in 2:input$ncol){
num.inputs.coli <- paste0("<input id='r", 1:input$nrow, "c", i, "' class='shiny-bound-input' type='number' value='1'>")
df <- cbind(df,num.inputs.coli)
}
}
colnames(df) <- paste0("time ",as.numeric(1:input$ncol))
df
}, sanitize.text.function = function(x) x)
})
output$textoutput <- renderUI(paste0("Cells [1,1] and [2,2]: ",input$r1c1,",",input$r2c2))
}
))
但是,当我尝试对矩阵中的输入执行任何操作时,例如output$textoutput <- renderUI(as.numeric(paste0(input$r1c1))+as.numeric(paste0(input$r2c2)))
,我会得到像$ operator is invalid for atomic vectors
这样的经典R错误。我尝试了许多“as.numeric&#39;,&#39; as.character&#39;等等的组合。试图让它变成正确的格式。当我检查那些输入单元格的结构时,我发现它们有一个额外的“空”&#39;我似乎无法摆脱的属性,但我不确定这是否是问题的根源。
简而言之,如何从该矩阵中提取普通数字?或者有更好的方法来闪亮吗?我所知道的唯一其他解决方案是rhandsontable包,如果有合理的替代方案,我宁愿不使用。
任何建议都将非常感谢。谢谢!
修改/解决方案:将renderUI
和uiOutput
替换为renderPrint
和verbatimTextOutput
解决问题。感谢您的评论,blondeclover!