gpt4 book ai didi

r - Shiny 如何动态选择导入数据集的列进行进一步分析

转载 作者:行者123 更新时间:2023-12-04 09:28:06 24 4
gpt4 key购买 nike

我正在尝试一个小型 Shiny 应用程序,其中我从本地目录加载一个 CSV 文件,然后从数据框中选择特定列并使用此子集数据框进行进一步的数据分析。

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(

# Application title
titlePanel("Old Faithful Geyser Data"),

# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
fileInput("dataset", "Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")),
# Include clarifying text ----
#helpText(em("Note: This app requires file in csv format only!!")),
helpText(em("Note:Select all the inputs and click on button as given below to exectute the app")),
# Input: Checkbox if file has header ----
checkboxInput("header", "Header", TRUE),
# Input: Select separator ----
radioButtons("sep", "Separator",
choices = c(Comma = ",",
Semicolon = ";",
Tab = "\t"),
selected = ","),
selectInput("select", "Select columns to display", names(datasetInput), multiple = TRUE),
actionButton("update", "Update Data set", class = "btn-primary",style='padding:4px; font-size:120%')
),

# Show a plot of the generated distribution
mainPanel(
h2('The Mydata'),
dataTableOutput('mytable')
)
)
)

# Define server logic required to draw a histogram
server <- function(input, output) {

datasetInput <- eventReactive(input$update, {
validate(need(input$dataset != "", "Please select a data set in csv format only!!!"))# custom error message on opening the app
read.csv(input$dataset$datapath,
header = input$header,
sep = input$sep)
}, ignoreNULL = FALSE)

dataset <- reactive({
df_input<-datasetInput()
df_input$x<-NULL
df_input
})

output$mytable = renderDataTable({
columns = names(dataset)
if (!is.null(input$select)) {
columns = input$select
}
dataset[,columns,drop=FALSE]
})
}

# Run the application
shinyApp(ui = ui, server = server)

查看一些 SO 答案;得到了一些;一个如下所示:

shiny allowling users to choose which columns to display

但是这个答案,数据集是预定义的;我想让用户下载他自己的数据集。

我收到以下错误:

Error in lapply(obj, function(val) { : object 'datasetInput' not found



我想我必须在某个地方使用observeEvent 函数?

最佳答案

这是 server.R 的变体;与 akrun 一起使用 ui.R .这个动态调整过滤选项,并允许您通过添加列名来添加列,即使在单击按钮后也是如此。

library(shiny)
library(DT)

server <- function(session, input, output) {

data <- reactive({
req(input$dataset)
read.csv(input$dataset$datapath, header = input$header,sep = input$sep)
})

filtereddata <- eventReactive({
input$update
data()
}, {
req(data())
if(is.null(input$select) || input$select == "")
data() else
data()[, colnames(data()) %in% input$select]
})

observeEvent(data(), {
updateSelectInput(session, "select", choices=colnames(data()))
})

output$mytable <- renderDataTable(filtereddata())

}

关于r - Shiny 如何动态选择导入数据集的列进行进一步分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46010595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com