R 基于用户输入动态地对数据帧进行子集设置,并将结果表作为另一个用户输入显示在一个闪亮的应用程序中
我是新来的闪亮,并试图做到以下几点- 我有一个csv文件,它有两列-ID和名称。在ui端,用户可以输入ID(textInput)。在服务器端,我将csv文件作为数据帧读取,并基于用户定义的文本输入,对数据帧进行子集设置。我想将生成的数据帧(在子集设置之后)显示为另一个用户输入,每行旁边都有一个复选框。我不知道从哪里开始R 基于用户输入动态地对数据帧进行子集设置,并将结果表作为另一个用户输入显示在一个闪亮的应用程序中,r,shiny,R,Shiny,我是新来的闪亮,并试图做到以下几点- 我有一个csv文件,它有两列-ID和名称。在ui端,用户可以输入ID(textInput)。在服务器端,我将csv文件作为数据帧读取,并基于用户定义的文本输入,对数据帧进行子集设置。我想将生成的数据帧(在子集设置之后)显示为另一个用户输入,每行旁边都有一个复选框。我不知道从哪里开始 ui <- fluidPage( useShinyjs(), #include shinyjs # Applicatio
ui <- fluidPage(
useShinyjs(), #include shinyjs
# Application title
titlePanel(fluidRow(
column(3, " ADVANCE DATA RETRIEVAL",align="center"),
column(2, offset = 0,img(height =90,width=250,src="logo.png",align="left"))
)),
sidebarLayout(sidebarPanel(width = 5,
helpText("Please enter a station ID."),textInput("stationID", "IDs", value = ""),
actionBttn("goButton","Go!",color = "default",style = "fill",size = "lg")),
mainPanel(width = 6,tableOutput("results"))))
server <- function(input, output, session) {
TS_metadata<-eventReactive(input$goButton,{
PRECIP<-read.csv("Precip.csv", header = TRUE)
Subset_Precip<-subset(PRECIP, PRECIP$ID==input$stationID)
)}
}
ui这里是一个简短的演示,包括DT
datatable中的复选框。这是基于yihui在github响应中提供的
这种方法将您的子集数据保存在reactiveVal
中以供使用。复选框是动态生成的,并使用输入的ID
编号作为复选框输入。例如,选中的ID
20546将为第一个复选框设置20546_1
,为第二个复选框设置20546_2
,等等。因此在更改数据文件时,每个复选框都是唯一的(仅用于演示)
另一个输出显示如何检索复选框结果(TRUE/FALSE)
库(闪亮)
图书馆(DT)
图书馆(shinyjs)
图书馆(shinyWidgets)
用户界面
library(shiny)
library(DT)
library(shinyjs)
library(shinyWidgets)
ui <- fluidPage(
useShinyjs(), #include shinyjs
# Application title
titlePanel(
fluidRow(
column(3, " ADVANCE DATA RETRIEVAL",align="center"),
column(2, offset = 0,img(height =90,width=250,src="logo.png",align="left"))
)),
sidebarLayout(
sidebarPanel(
width = 5,
helpText("Please enter a station ID."),textInput("stationID", "IDs", value = ""),
actionBttn("goButton","Go!",color = "default",style = "fill",size = "lg")),
mainPanel(
width = 6,
DT::dataTableOutput("results"),
verbatimTextOutput('cbinfo')
)
)
)
server = function(input, output, session) {
Subset_Precip <- reactiveVal(NULL)
TS_metadata <- observeEvent(input$goButton,{
PRECIP<-read.csv("Precip.csv", header = TRUE)
Subset_Precip(subset(PRECIP, PRECIP$ID==input$stationID))
})
# create a character vector of shiny inputs
shinyInput = function(FUN, len, id, ...) {
inputs = character(len)
for (i in seq_len(len)) {
inputs[i] = as.character(FUN(paste0(id, i), label = NULL, width = 1, ...))
}
inputs
}
# obtain the values of inputs
shinyValue = function(id, len) {
unlist(lapply(seq_len(len), function(i) {
value = input[[paste0(id, i)]]
if (is.null(value)) NA else value
}))
}
dataCB <- reactive({
if (is.null(Subset_Precip())) return(data.frame(NULL))
data.frame(
v1 = shinyInput(checkboxInput, nrow(Subset_Precip()), paste0(input$goButton, '_'), value = TRUE),
v2 = Subset_Precip()$ID,
v3 = Subset_Precip()$Name,
stringsAsFactors = FALSE
)
})
# render the table containing shiny inputs
output$results = DT::renderDataTable(
dataCB(), server = FALSE, escape = FALSE, selection = 'none', options = list(
preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')
)
)
# print the values of inputs
output$cbinfo = renderPrint({
if (is.null(Subset_Precip())) return (NULL)
data.frame(v1 = shinyValue(paste0(input$goButton, '_'), nrow(Subset_Precip())))
})
}
shinyApp(ui, server)