如何在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
相关产品推荐
相关产品推荐

