如何创建函数处理TidyMultiqc读取JSON时的NaN解析报错?
自动修复JSON文件NaN并读取的函数实现
可以通过R的tryCatch错误捕获机制,实现遇到JSON解析错误时自动修复文件并重试读取的逻辑,具体实现如下:
完整函数代码
library(purrr) library(TidyMultiqc) load_multiqc_safe <- function(path) { # 定位目标JSON文件(避免匹配到非JSON的后缀文件) files <- dir(path, pattern = "\\.json$", full.names = TRUE) # 定义带错误处理的单文件读取逻辑 read_single_file <- function(file) { tryCatch( expr = { load_multiqc(file) }, error = function(e) { # 仅针对目标JSON解析错误执行修复 if (grepl("lexical error: invalid char in json text", e$message) && grepl("NaN", e$message)) { # 用shQuote处理路径,避免含空格/特殊字符时命令出错 system(paste("gsed -i 's/NaN/null/g'", shQuote(file))) # 修复后重新读取文件 load_multiqc(file) } else { # 非目标错误,抛出原始错误信息 stop(e) } } ) } # 批量处理所有JSON文件 files %>% map(read_single_file) }
代码说明
- 精准错误触发:通过匹配报错信息中的特征字符串,确保只在
NaN导致的JSON解析失败时执行修复,避免误操作。 - 路径安全处理:使用
shQuote()包裹文件路径,解决路径含空格或特殊字符时的命令执行异常问题。 - 批量容错处理:单个文件的错误不会中断整个批量读取流程,每个文件独立处理错误与修复。
使用方式
直接传入JSON文件所在的文件夹路径即可:
result <- load_multiqc_safe("path/to/your/json/folder")
内容的提问来源于stack exchange,提问作者LDT
相关产品推荐
相关产品推荐

