R语言使用lapply调用函数时如何跳过空数据框避免崩溃
问题根因
- 变量引用错误:读取后的csv数据存储在
file变量中,但你判断行数时使用的是入参table,table本质是传入的文件名字符串,不是读取后的数据框,判断逻辑完全不生效。 - 关键字误用:
next仅适用于for、while这类显式循环结构,lapply调用的自定义函数中无法识别next,会直接触发报错终止整体流程。
修正方案
步骤1:调整自定义函数逻辑
将空值判断的对象替换为读取后的数据框,遇到空数据时用return(NULL)直接终止当前次函数运行,不会抛出错误中断整体批量处理:
my.function <- function(table) { file <- read.csv(table, header = T) # 空数据直接返回,跳过后续处理 if(nrow(file) == 0) { return(NULL) } # 此处写入非空数据的后续处理逻辑 # ...... }
步骤2:(可选)过滤无效返回结果
批量调用后如果需要剔除空文件对应的NULL返回值,可增加过滤逻辑:
# 批量调用不会因为空文件中断 result_list <- lapply(FileNames, function(y) my.function(y)) # 过滤掉所有空文件返回的NULL,仅保留有效处理结果 result_list <- Filter(Negate(is.null), result_list)
内容的提问来源于stack exchange,提问作者Lila McPhee
相关产品推荐
相关产品推荐

