我很擅长发光并且遇到麻烦并且一直在寻找,所以希望有人可以帮助我。一旦用户选择了一个动作按钮(在UI上的actionButton),我希望服务器脚本调用一个函数(在服务器中是evenReactive)我写的(myfunction,见下文),它使用UI中的输入项并获取正确的参数我需要运行myfunction并生成一个X2数据矩阵,将其绘制成一个表(服务器中的renderTable,如下)。数据是n X 2矩阵。
我在下面有一些示例代码。它不是entre代码,所以你不会看到我在函数中输入的UI,或者与之关联的服务器部分。但是,这是我试图修复的部分。我希望没关系。我不需要renderText,但是当我把它拿出来时我得到一个错误。抱歉格式化。复制和粘贴改变了一点。
library(shiny)
ui <- shinyUI(fluidPage
(column(4,actionButton("gobutton", "Run"),verbatimTextOutput("ntext1")),
column(4, DT::dataTableOutput("table",width = "75%"))))
library(shiny)
shinyServer(function(input, output, session)
ntext1 <- eventReactive(input$gobutton, {
if (input$gobutton==1){
data=myfunction(input$checkbox,input$dateRange)}
})
output$ntext1 <- renderText({ntext1()})
output$table <- DT::renderDataTable(DT::datatable({
data
})
))
myfunction <-function(All,date1,date2,source_cd,tran_cd,airline_list,mag_level) {
print(All); print(date1); print(date2); print(source_cd);print(tran_cd);print(airline_list);print(mag_level)
setwd("C:/Users/TRomano/Documents/Projects/TrendAnalysis/Data")
data = read.csv("Airlines.csv",header = TRUE)
return(data)
}
答案 0 :(得分:4)
对于这类问题,我喜欢使用旨在以被动方式存储数据的reactiveValues()
。
这是一个简单的应用程序(单个应用程序,不分成服务器和用户界面),它展示了我认为你想要做的事情
library(shiny)
library(DT)
ui <- shinyUI(
fluidPage(
column(width = 4,
actionButton("gobutton", "Run")
column(width = 4,
DT::dataTableOutput("table",
width = "75%"))))
server <- shinyServer(function(input, output, session){
rv <- reactiveValues()
rv$data <- NULL
observe({ ## will 'observe' the button press
if(input$gobutton){
print("here") ## for debugging
rv$data <- myfunction() ## store the data in the reactive value
rv$data
}
})
output$table <- DT::renderDataTable({
## The data has been stored in our rv, so can just return it here
rv$data
})
})
myfunction <- function(){
data <- data.frame(id = c(1,2,3),
val = letters[1:3])
return(data)
}
shinyApp(ui, server)
答案 1 :(得分:1)
库(有光泽)
库(shinydashboard)
ui&lt; - dashboardPage(
dashboardHeader(title =“公司名称”),
dashboardSidebar(sidebarMenu(
menuItem(“结果表”,tabName =“ResultsTable”,图标=图标
( “ResultsTable”)),
dashboardBody(
tabItems(
tabItem(tabName tabItem(tabName = "ResultsTable",
fluidPage(
headerPanel(
fluidRow(
column(4,
selectInput("sour",
"Source Type:",
c("All",
unique(as.character(data_source_cd)))), offset=2
),
column(4,
selectInput("tran",
"Transaction Type:",
c("All",
unique(as.character(tran_cd)))))),
# Create a new row for the table.
fluidRow(column(8, DT::dataTableOutput("table",width = "75%"),offset = 2))))))
库(有光泽) shinyServer(函数(输入,输出,会话){ ntext1&lt; - eventReactive(输入$ gobutton,{
if (input$dateRange[2]<input$dateRange[1]){print("You selected the date range option;however, the end date entered occurs before the starting date")}else{
output$ntext1 <- renderText({print("Analysis complete...")});
observe({
if(input$gobutton){
rv$data <- myfunction() }
})
output$table <- DT::renderDataTable(DT::datatable({
data <- rv$data
if (input$sour != "All") {
data <- data[data[,5] == input$sour,]
}else{data}
if (input$tran != "All") {
data <-data[data[,6] == input$tran,]
}else{data}
}))
}})
在仪表板的主页面上选择一个操作按钮(未显示)后,myfunction将使用主仪表板页面的输入进行分析。在另一个选项卡上,一旦分析完成,就会显示一个表格。有下拉菜单(输入$ tran,输入$ sour)将根据用户选择的内容减少表中的内容。如果输入中有任何错误,主仪表板页面上会出现文本警告,并且在选择正确的输入之前,不会创建带有表格的选项卡。
observe函数允许我运行我的函数并将函数的输出数据设置为一个变量,我以后可以用它来创建表(如图所示)。
这是我第一次发帖。任何问题随时都可以问。