0
我正在尝试编写一个脚本来上传.csv文件并在UI中引发子选项(以复选框的形式)。上传后,显示以前不可见的复选框,显示实际的数据值。同时,还会出现一个动作按钮,在选定的数据值(通过复选框)(可能)改变之后被点击。r闪亮 - 通过选择值减少上传的数据集
那么我有什么?
1)上传 - 确定。
2)选择并显示复选框 - 确定。
3)显示操作按钮 - 确定。
4)正确执行所需的操作(=数据子集) - 不正确;子集显然会返回空或NULL数据帧。
任何帮助将不胜感激。
这是代码。
我会补充说,我基于子集的Dte字段是一个日期字段,它最初在csv中为dd/mm/yyyy格式且不含引号。
library(shiny)
library(lubridate)
ui = fluidPage(sidebarPanel(width = 2,
fileInput('files', '', accept = c('text/csv','text/comma-separated-values','text/tab-separated-values','text/plain','.csv','.tsv')),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator', c(Comma=',',Semicolon=';',Tab='\t'), selected=';'),
radioButtons('quote', 'Quote', c(None='','Double Quote'='"','Single Quote'="'"), selected='"'),
uiOutput('apply')),
mainPanel(width = 10, uiOutput('years'), dataTableOutput("tabel4")
)
)
server = function(input, output, session) {
### if a csv is selected (through fileInput()), it is read
vis0 <- eventReactive(input$files, {
vis <- read.csv(input$files$datapath, header = input$header, sep = input$sep, quote = input$quote,
stringsAsFactors =FALSE)
vis$Dte <- as.Date(as.character(vis$Dte), "%d/%m/%Y")
vis$year <- factor(year(vis$Dte))
vis
})
### button appearing only after
output$apply <- renderUI({
if (is.null(input$files)) return()
actionButton("Load", "APPLY DATA")
})
### get checkbox values from data and throw them back to UI
output$years <- renderUI({
df <- vis0()
df$year <- as.character(df$year)
if (is.null(df)) return(NULL)
items= sort(unique(df$year))
names(items)=items
checkboxGroupInput("dependent","Check or uncheck years to be included or excluded",
choices=items, selected = items, inline = TRUE)
})
### use selected checkbox values to reduce initial dataset
vis1 <- reactive({
if (is.null(input$Load)) return()
if (input$Load==0) return()
data <- vis0()
data <- subset(data, as.character(year) %in% input$years)
data
})
### using the checkbox-reduced data to create a table
output$tabel4 <- renderDataTable({
vis1()
})
}
shinyApp(ui = ui, server = server, options = list(launch.browser=TRUE))
你确定你正在使用'uiOutput'吗? [docs](https://shiny.rstudio.com/articles/dynamic-ui.html)表示*在ui.R中,使用uiOutput来告诉Shiny应该呈现这些控件的位置。*也就是说,我不知道输入$ years是否真的返回服务器的工作状态。 – patrick
我会说我做了你引用的......?另请参阅我遵循的这个工作示例(最常见的答案)。 https://www.google.be/url?sa=t&source=web&rct=j&url=https://stackoverflow.com/questions/27769186/shiny-show-buttons-only-after-file-has-been-uploaded&ved= 0ahUKEwiejZ6XzrzUAhVGK1AKHWOyBzkQFggcMAA&usg = AFQjCNH1YpN-jPY2OEGwWlOBdxw6YxYIKA&sig2 = BHJrx4mYZiiBF4VfiUZQxg –
我试图直接在UI输出中输入$ year作为文本输出。看起来你是对的,或者至少选定的年份没有显示。任何想法,替代方案......? –