R/Shiny中if判断文件路径报argument of length zero错误如何解决
R/Shiny 路径判断错误修复方案
错误原因
parseFilePaths在未选中有效文件时返回的inFile$datapath为长度为0的字符向量character(0),直接用== ""判断会返回长度为0的逻辑值,而R的if语句要求判断条件必须是长度为1的布尔值,因此抛出「argument of length zero」错误。
另外你现有代码的判断逻辑写反了:inFile$datapath为空对应的是无有效文件,非空才是存在真实路径。
修正后代码
shinyFileChoose(input,'file', session=session,roots=c(wd='.')) observeEvent(input$file, { inFile <- parseFilePaths(roots=c(wd='.'), input$file) print(inFile$datapath) # 先判断路径长度是否合法,再判断路径是否非空 if (length(inFile$datapath) == 1 && nzchar(inFile$datapath)) { print("File Exists") # 正常读取文件的逻辑写在此处 } else { print("No file found.") session$reload() } })
关键逻辑说明
- 先通过
length(inFile$datapath) == 1过滤掉长度为0的异常情况,适配单文件选择场景,如果你开启了多文件选择,可修改为length(inFile$datapath) >= 1 nzchar()是R内置的字符串非空判断函数,比直接用!= ""兼容性更强,可规避空字符串、NA等边界问题- 使用
&&短路运算符,前序判断不通过时不会执行后续判断,避免出现长度不匹配的报错
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

