假设我有一个接受输入的函数返回一个带有两个值的数据框。我想呈现以下文本:值1是df1$value1
,值2是df1$value2
。有没有办法做到这一点?
这是我现在的代码:
## app.R ##
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Basic dashboard"),
dashboardSidebar(),
dashboardBody(
# Boxes need to be put in a row (or column)
fluidRow(
box(renderText(paste('Value 1 is', "df1$value1"))),
box(
title = "Controls",
sliderInput("slider", "X:", 1, 100, 50)
)
)
)
)
my.func <- function(X){
df1 = data.frame(value1=X*X, value2=sqrt(X))
return(df1)
}
server <- function(input, output) {
output$df1 <- renderTable({
my.func(input$slider)
})
}
shinyApp(ui, server)
谢谢!
答案 0 :(得分:1)
您可以在服务器功能中准备输出,如下所示:
server <- function(input, output) {
output$df1 <- renderUI({
df <- my.func(input$slider)
lapply(
1:ncol(df),
function(i) {
force(i)
p(paste("Value", i, "is", df[, i]))
}
)
})
}
然后使用uiOutput('df1')
在ui函数内部绑定。
或者,您可以使用observe
块并将特定值分配给循环中的输出:
observe({
df <- my.func(input$slider)
for (i in 1:ncol(df)) {
output[[paste0('value', i)]] <- renderText({ df[, i] })
}
})
然后,你可以在ui中使用textOutput
,就像这样textOutput('value1')
。