我想根据复选框输入动态选择的列来设置我的数据。 有什么方法可以让我的输入文件在我的代码中全局可用 这样可以很容易地进行进一步的操作。
以下是我的代码:
Server.R
library(shiny)
shinyServer(function(input, output) {
dInput <- reactive({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
finput <- read.csv(inFile$datapath, header=TRUE, sep=',',quote="'")
fheaders <- names(finput)
return(fheaders)
})
output$choose_columns <- renderUI({
checkboxGroupInput("columns", "Choose columns",
choices = dInput(),
selected = NULL)
})
# to observe in environment which columns are selected
observe({ print(input$columns) })
output$data_table <- renderTable({
# If missing input, return to avoid error later in function
if(is.null(input$file1))
return()
# Get the data set
dat <- get(input$file1)
# Keep the selected columns
dat <- dat[, input$columns, drop = FALSE]
# Return first 20 rows
head(dat, 20)
})
})
ui.R
library(shiny)
# Define UI for application
shinyUI(fluidPage(
# Application title
titlePanel("Subset a table"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
uiOutput("choose_columns")
),
mainPanel(
tableOutput("data_table")
)
)
))
我在显示tableOutput时遇到以下错误(&#34; data_table&#34;)
Error : invalid first argument
答案 0 :(得分:1)
我认为您的reactive
需要dInput
,并在过滤后的数据上再添加一个data_table()
。然后,您可以使用()
(使用observe
)进行进一步操作。下面的(单个文件)代码在我的机器上正常工作。我还删除了dInput
(无用)并更改了 library(shiny)
server <- shinyServer(function(input, output) {
dInput <- reactive({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
else
return(read.csv(inFile$datapath, header=TRUE, sep=',',quote="'"))
})
output$choose_columns <- renderUI({
cn <- colnames(dInput())
selectInput("columns", "Choose columns",
choices = cn,
selected = cn,
size=10,
multiple=TRUE, selectize=FALSE)
})
data_table <- reactive({
# If missing input, return to avoid error later in function
if(is.null(input$file1))
return(NULL)
# Get the data set
dat <- dInput()
# Keep the selected columns
dat[, input$columns, drop = FALSE]
})
output$data_table <- renderTable(data_table())
})
# Define UI for application
ui <- shinyUI(fluidPage(
# Application title
titlePanel("Subset a table"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
uiOutput("choose_columns")
),
mainPanel(
h3("Filtered table"),
tableOutput("data_table")
)
)
))
shinyApp(ui, server)
返回的内容(实际文件而不是列号)。
`s.equals("PWD")` instead of `s == "PWD"` or `equalsIgnoreCase(...)` for case insensitive comparison.
是你想要的吗?