RShiny: автоматически заполнять selectInput значениями из списка фреймов данных? - PullRequest
0 голосов
/ 19 февраля 2019

Можно ли заполнить варианты (значения) selectInput, вызвав фрейм данных в списке?Это помогло бы ускорить выполнение сценария, а также исключить длинные варианты выбора.

У меня есть папка (варианты выбора) в моей папке app.R .Эта папка содержит 15 файлов .xlsx (Excel), каждый из которых содержит два столбца (x = id, y = значение).

l list<-list.files(pattern=“*.xlsx”) df_list<-lapply(list,readxl::read_excel)

Возвращает список данных.кадры (например):

Список из 2 $ 001.txt: 'data.frame': 15 шт.из 2 переменных: .. $ X: фактор с 50 уровнями .. $ Y: коэффициент с 50 уровнями $ 002.txt: 'data.frame': 5 наб.из 2 переменных .. $ X: фактор с 5 уровнями .. $ Y: коэффициент с 5 уровнями

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

selectInput (“state”, “States:”,
df_list[2][[2]]),

selectInput (“cnfd”, “Confidence”,
df_list[7][[2]])

...

str (df_list [2])

df x: 1,2,3,4,5... 50 лет: Аляска, Алабама, Арканзас ...

стр. (Df_list [7]

df x: 1,2,3,4,5y: «очень низкий», «низкий», «умеренный», «высокий», «очень высокий»

Есть идеи?

=========== Обновление ===============

Требуется убедиться, что у меня указана правильная структура:

str(df_list)
List of 4
 $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   5 obs. of  2 variables:
  ..$ id   : num [1:5] 1 2 3 4 5
  ..$ value: chr [1:5] "very low" "low" "moderate" "high" ...
 $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   45 obs. of  2 variables:
  ..$ id   : num [1:45] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ value: chr [1:45] "George Washington" "John Adams" "Thomas Jefferson" "James Madison" ...
 $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   50 obs. of  2 variables:
  ..$ id   : num [1:50] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ value: chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" ...
 $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   196 obs. of  2 variables:
  ..$ id   : num [1:196] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ value: chr [1:196] "Kabul" "Tirana" "Algiers" "Andorra la Vella"...

ShinyApp:

load('C:/Users/me/OneDrive/Documents/RProj/apps/data/dfenv.RData')

ui <- fluidPage(


   titlePanel("Testing selectInput with list of data-frames"),


   sidebarLayout(
      sidebarPanel(
        selectInput("state","States:",
                    df_list[3][2]),
        selectInput("cty","Capital City:",
                    df_list[4][2]),
        selectInput("cnf","Confidence:",
                    df_list[1][2]),
        selectInput('potus',"President:",
                    df_list[2][2])
      )))


server <- function(input, output) {
   }


shinyApp(ui = ui, server = server)

Ошибка:

Ошибка в (функция (выбор, имя): все подсписки в «вариантах» должны быть названы.

1 Ответ

0 голосов
/ 20 февраля 2019

Как обычно, я нашел ответ .. постинг для БУДУЩЕГО.

library(readxl)
#create list of all files
list<-list.files(pattern="*.xlsx")

#read the files from `list`
df_list<-lapply(list,readxl::read_excel)

#apply function to take the second column from each sub-list (df)
x<-lapply(df_list, function(x) x[2])

#unlist IOT call in app
x2<-unlist(x, recursive = FALSE)

Структура (x2):

> List of 4  $ value: chr [1:5] "very low" "low" "moderate" "high" ... 
> $ value: chr [1:45] "George Washington" "John Adams" "Thomas
> Jefferson" "James Madison" ...  $ value: chr [1:50] "Alabama" "Alaska"
> "Arizona" "Arkansas" ...  $ value: chr [1:196] "Kabul" "Tirana"
> "Algiers" "Andorra la Vella" ...

Приложение (обратите внимание, что вывод совершенно другой, какЯ тестировал selectInput)

library(shiny)
library(readxl)

list<-list.files(pattern="*.xlsx")

df_list<-lapply(list,readxl::read_excel)

df_x<-lapply(df_list, function(x) x[2])

x2<-unlist(x, recursive = FALSE)

shinyApp(
  ui = fluidPage(

        selectInput(inputId = "state",label="States:",
                    choices = 
                    x2[3]),
        selectInput(inputId="cty",label="Capital City:",
                    choices=
                      x2[4]),
        selectInput(inputId="cnf",label = "Confidence:",
                    choices = 
                      x2[1]),
        selectInput(inputId='potus',label = "President:",
                    choices=
                      x2[2]),
        tableOutput('data')),

  server = function(input, output) {
    output$data<-renderTable({
      mtcars[,c("mpg",input$state),drop=FALSE]},rownames=TRUE)
  }
)

рабочий результат

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