用于访问R shiny应用程序中变量名称列表的函数(相当于ls)

f87krz0w  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(131)

我有一个很短的问题:我如何访问R Shiny应用程序中定义的变量列表?我正在寻找与ls()函数相当的东西,它在R Shiny中不能按预期工作...
如果你能帮忙,我将不胜感激。
先谢了
这里有一段代码,我想做什么:

library(shiny)

my_file1 = "monfichier.txt" 
my_file2 = "monfichier.txt" 

ui = fluidPage(
  fluidPage(
    br(),
    fluidRow(
      verbatimTextOutput('print_fichiers')
  )
  )
)   
server <- function(input, output,session){
  output$print_fichiers <- renderPrint({
    ## I would like to use ls() function 
    # to print the ''hard-coded'' filename stored 
    # in the variables that match the pattern ''file''
    all_files <- ls()[grepl("file", xx)]
    for(ifile in all_files) {
# would like to print 
# my_file1 = monfichier.txt and so on
      print(paste0("\n", ifile, "\t=\t\"", get(ifile)    , "\"\n"))
    }
  })
}
shinyApp(ui = ui, server = server)
9w11ddsr

9w11ddsr1#

查找变量时,ls()将使用当前环境。由于您是在函数内部调用它,因此默认情况下,您只能看到该作用域的局部变量。您可以使用

all_files <- ls(pattern="file", envir=globalenv())

这将返回名称中包含“file”的所有全局变量。由于ls已经有了pattern=参数,因此不需要使用grepl
另一种选择是显式地捕获您要在变量中探索的环境

library(shiny)

my_file1 = "monfichier.txt" 
my_file2 = "monfichier.txt" 
shiny_env <- environment()

ui = fluidPage(fluidPage(br(),fluidRow(verbatimTextOutput('print_fichiers'))))   

server <- function(input, output,session){
  output$print_fichiers <- renderPrint({
    all_files <- ls(pattern="file", envir=shiny_env)
    print(shiny_env)
    for(ifile in all_files) {
      print(paste0("\n", ifile, "\t=\t\"", get(ifile)    , "\"\n"))
    }
  })
}
shinyApp(ui = ui, server = server)

相关问题