R Shiny flexdashboard如何根据用户输入动态读取对应CSV文件
修复方案
报错原因
你收到的$ operator is invalid for atomic vectors报错是因为input$input_type本身就是返回用户选中的字符串值(比如"Oct 2021"),属于原子向量类型,不支持用$运算符二次提取属性,同时你原来的文件路径拼接逻辑完全错误。
需调整的核心点
- 正确拼接文件路径:按「文件夹路径 + 选中的文件名 + .csv后缀」的规则拼接,推荐用
file.path()自动适配不同操作系统的路径分隔符 - 增加输入校验:用
req()确保用户已选中选项后再执行读取逻辑,避免初始化时报错 - 注意路径正确性:如果
Test文件夹在你当前R的工作目录下,直接写"Test"即可,如果是在家目录下写"~/Test"
完整修改后代码
--- title: "Test" output: flexdashboard::flex_dashboard: runtime: shiny --- Page 1 ===================================== Inputs {.sidebar} ------------------------------------- ```{r} library(flexdashboard) library(shiny) library(DT) library(readr)
selectInput("input_type","Select Month:", c("Oct 2021", "Nov 2021"))
Column
DATA OUTPUTS HERE
#Prepare data here data <- reactive({ # 先校验输入存在 req(input$input_type) # 拼接正确的文件路径,此处假设Test文件夹在当前工作目录下 file_path <- file.path("Test", paste0(input$input_type, ".csv")) # 读取文件 tmp <- read.csv(file_path) tmp })
renderDataTable( datatable( data() ) )
如果你的Test文件夹存放在家目录,把`file.path`里的第一个参数改成`"~/Test"`即可。 内容的提问来源于stack exchange,提问作者RL_Pug
相关产品推荐
相关产品推荐

