R 4.3.0误将字符串识别为对象报错求助:函数参数异常问题
R 4.3.0字符串被误识别为对象的问题排查与解决
问题场景
更新R至4.3.0版本后,出现字符串被错误识别为对象的异常:
执行代码:
plot_sim_result(sim = readRDS(file.path(sim.dir, "sim.rds")), ...)
触发报错:
Error in plot_sim_result(sim = readRDS(file.path(sim.dir, "sim.rds")), : object '"sim.rds"' not found
单独执行file.path(sim.dir, "sim.rds")或readRDS(file.path(sim.dir, "sim.rds"))均正常。该问题在会话启动初期无异常,运行一段时间后出现,重启R仍存在,且在多个函数参数场景中重复发生。环境为MacBook(macOS Big SUR 11.7.6),RStudio已更新至最新版本。
可能原因
- R 4.3.0语法解析bug:R 4.3.0在处理嵌套函数调用中的字符串常量时,存在解析逻辑异常,导致字符串被误判为对象引用。
- RStudio兼容性冲突:最新版RStudio与R 4.3.0的语法解析逻辑存在适配问题,运行过程中缓存的解析结果出错。
- 工作区/包污染:会话加载的第三方包可能修改了全局解析规则,或工作区中存在与字符串内容同名的隐藏对象,触发错误解析。
- 编码不匹配:macOS下文件路径编码与R默认编码不一致,导致字符串解析异常。
解决方法
临时规避:拆分变量赋值
将字符串路径先赋值给变量,再传入函数,绕过嵌套调用的解析问题:sim_path <- file.path(sim.dir, "sim.rds") plot_sim_result(sim = readRDS(sim_path), ...)更新适配所有依赖包
确保所有使用的包(尤其是自定义plot_sim_result所在包)适配R 4.3.0,执行强制更新:update.packages(ask = FALSE, checkBuilt = TRUE)重置RStudio缓存
关闭RStudio后,删除~/Library/Application Support/RStudio目录下的缓存文件,重启RStudio重新初始化配置。排查RStudio影响
在终端中直接启动R运行代码,若问题消失,说明是RStudio的兼容性问题,可等待RStudio官方补丁更新。回退R版本
若上述方法均无效,可暂时回退到R 4.2.x稳定版本,待R官方修复解析bug后再升级。
内容的提问来源于stack exchange,提问作者Trang Q. Nguyen
相关产品推荐
相关产品推荐

