Как использовать объекты рабочей области в приложении R Shiny - PullRequest
0 голосов
/ 03 октября 2018

Я бы хотел, чтобы пользователь мог вводить имя объекта фрейма данных и отображать этот объект как отформатированную таблицу данных в приложении Shiny.

Вот игрушечный пример.В рабочей области доступны два объекта данных: df1 и df2.Когда пользователь вводит df1, я бы хотел, чтобы этот кадр данных отображался.Аналогично для df2 или для любого другого кадра данных, который они имеют в своей рабочей области.

Я подозреваю, что должен что-то делать со средой, областью или оценкой, но я не уверен, что именно.

Я прокомментировал код, в котором я могу жестко кодировать во встроенном наборе данных mtcars и правильно отобразил его.Теперь я просто хочу сделать то же самое для любого специального информационного кадра в рабочей области пользователя.

library(shiny)
set.seed(1234)

x <- sample.int(n = 20)
y <- sample(x = LETTERS, size = 20)
a <- rnorm(n = 20)
b <- sample(x = letters, size = 20)

df1 <- data.frame(x = x, y = y)
df2 <- data.frame(a = a, b = b)


# Define UI ----
ui <- fluidPage(
  titlePanel("Using text inputs to select dataframes"),

  sidebarLayout(position = "left",
                sidebarPanel(width = 5,
                            textInput("dfInput", h5("Enter name of dataframe"),
                                                value = "")),

                mainPanel(width = 6,
                          h4("Here's your data"),
                          textOutput("selected_df"),
                          dataTableOutput("view")
                )

  )
)


# Define server logic ----
server <- function(input, output, session) {

  output$selected_df <- renderText({
    paste("You have selected ", input$dfInput)
  })

  output$view <-
    renderDataTable({
      input$dfInput # this should render the selected dataframe. If you replace this with mtcars then that dataset is correctly rendered.
    })

}


# Run the app ----
shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 03 октября 2018

Сначала мы собираем все кадры данных в глобальной среде, а затем используем get для доступа к объекту.Я изменил textInput на selectInput, поэтому вам не нужно ничего вводить, возможно, вы допустили ошибку.Более того, я добавил данные из пакета datasets, однако вы должны создать больше тестовых случаев, чтобы проверить, существуют ли данные

library(shiny)
set.seed(1234)

x <- sample.int(n = 20)
y <- sample(x = LETTERS, size = 20)
a <- rnorm(n = 20)
b <- sample(x = letters, size = 20)

df1 <- data.frame(x = x, y = y)
df2 <- data.frame(a = a, b = b)

mydataframes <- names(which(unlist(eapply(.GlobalEnv,is.data.frame))))
OpenData <- data()$results[,3]

#Define UI ----
ui <- fluidPage(
  titlePanel("Using text inputs to select dataframes"),

  sidebarLayout(position = "left",
                sidebarPanel(width = 5,
                             selectInput("dfInput","Select Dataframe",
                               #choices = mydataframes,

                               list("Your Datasets" = c(mydataframes),
                                    "R Datasets" = c(OpenData),


                               selected=NULL))),

                mainPanel(width = 6,
                          h4("Here's your data"),
                          textOutput("selected_df"),
                          dataTableOutput("view")
                )

  )
)


# Define server logic ----
server <- function(input, output, session) {

  output$selected_df <- renderText({
    paste("You have selected ", input$dfInput)
  })

  output$view <-
    renderDataTable({
      as.data.frame(get(input$dfInput)) # this should render the selected dataframe. If you replace this with mtcars then that dataset is correctly rendered.
    })

}


# Run the app ----
shinyApp(ui = ui, server = server)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...