You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R Shiny应用中获取变量列表(等效于ls()函数)

如何在R Shiny中访问指定环境的变量列表(替代ls())

你遇到的核心问题是变量所处的环境不匹配:你在全局环境定义的my_file1、my_file2,Shiny server函数内默认调用ls()只会扫描函数的局部环境,因此无法找到这些全局变量。

解决方法:指定ls()和get()的环境参数

通过指定envir = .GlobalEnv,让ls()扫描全局环境的变量,同时用get()从全局环境获取对应变量的值。

修正后的完整代码:

library(shiny)

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

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

server <- function(input, output, session){
  output$print_fichiers <- renderPrint({
    # 扫描全局环境,筛选名称包含"file"的变量
    all_files <- ls(envir = .GlobalEnv)[grepl("file", ls(envir = .GlobalEnv))]
    for(ifile in all_files) {
      # 从全局环境获取变量值并格式化输出
      print(paste0("\n", ifile, "\t=\t\"", get(ifile, envir = .GlobalEnv), "\"\n"))
    }
  })
}

shinyApp(ui = ui, server = server)

更简洁的写法(用eapply遍历环境)

eapply可以直接遍历指定环境的所有变量,一次性筛选并获取符合条件的变量名和值:

server <- function(input, output, session){
  output$print_fichiers <- renderPrint({
    # 遍历全局环境,筛选名称含"file"的变量
    file_vars <- eapply(.GlobalEnv, identity)[grepl("file", names(eapply(.GlobalEnv, identity)))]
    # 循环输出变量名和值
    for(var_name in names(file_vars)) {
      print(paste0("\n", var_name, "\t=\t\"", file_vars[[var_name]], "\"\n"))
    }
  })
}

注意事项

如果你的变量存储在自定义环境而非全局环境,只需将.GlobalEnv替换为对应的环境对象即可。

内容的提问来源于stack exchange,提问作者mazu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:45:46