【问题标题】:RShiny: Auto-populate selectInput with values from data frame list?R Shiny:使用数据框列表中的值自动填充 selectInput?
【发布时间】:2019-07-13 10:46:01
【问题描述】:

是否可以通过调用列表中的数据框来填充“selectInput”的选项(值)?这将有助于加快脚本的编写速度并省略冗长的选择。

我的 app.R 文件夹中有一个文件夹(选项)。此文件夹包含 15 个 .xlsx (Excel) 文件,每个文件包含两列 (x=id,y=value)。

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

这会返回一个数据框列表(例如):

2 人名单 $ 001.txt:'data.frame': 15 obs。 2个变量: ..$ X:因子 w/ 50 个级别 ..$ Y:因子 w/ 50 个级别 $ 002.txt:'data.frame': 5 obs。 2个变量 ..$ X:因子 w/ 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 y:阿拉斯加、阿拉巴马、阿肯色……

str(df_list[7]

df x: 1,2,3,4,5 y:‘非常低’、‘低’、‘中等’、‘高’、‘非常高’

有什么想法吗?

===========更新================

想确保我列出了正确的结构:

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"...

闪亮应用:

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)

错误:

(函数(选择,名称)中的错误: “choices”中的所有子列表都必须命名。

【问题讨论】:

  • 只要 df_list 对象在范围内,我认为这应该可以工作。我对我的应用程序中的选择输入做了类似的事情。您在哪里编写了两行代码来创建 df_list 对象?也可能再试一次,但指定参数名称以选择输入,即 id= label=choices=

标签: r shiny


【解决方案1】:

像往常一样,我找到了答案..为未来发帖。

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" ...

App(注意,输出与我测试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)
  }
)

working result

【讨论】:

    猜你喜欢
    • 2018-05-04
    • 2017-01-17
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多