You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言lapply函数出现Unexpected Symbol Error问题求助

解决R语言中lapply删除列表元素行的报错问题

首先看你遇到的报错Error: unexpected symbol in "a <- lapply(data_csv, funtion(x) x",最直接的原因是你把function拼写成了funtion——少了一个c,这是语法层面的拼写错误,R解析器无法识别这个错误的单词,所以抛出了意外符号的报错。

不过除了这个拼写问题,你的delete_row函数还有几个逻辑问题需要修正,不然即使拼写对了也会运行出错:

  • 函数里用到了iter变量,但这个变量并没有在函数内部定义,也没有作为参数传入,R找不到它的取值
  • 函数里引用了外部的data_csv,但在lapply中我们是逐个处理列表里的每个元素x,应该基于当前的x来判断,而不是直接用外部的列表对象
  • 你的函数只在满足条件时返回TRUE,但如果不满足条件,函数没有明确的返回值,默认会返回NULL,这会导致x[!delete_row(x)]出现索引错误

下面是修正后的完整代码:

步骤1:修正自定义函数delete_row

delete_row <- function(x){
  # 基于当前传入的x(即列表中的单个数据框)进行判断
  na_8_11 <- sum(is.na(x[, 8:11])) > 2
  na_12_15 <- sum(is.na(x[, 12:15])) > 2
  na_16_19 <- sum(is.na(x[, 16:19])) > 2
  # 满足任意一个条件就返回TRUE,否则返回FALSE
  return(na_8_11 || na_12_15 || na_16_19)
}

步骤2:修正lapply中的拼写错误并运行

# 把funtion改成正确的function,同时子集化时保留所有列
a <- lapply(data_csv, function(x) x[!delete_row(x), ])

额外说明:

  • 如果你的data_csv是一个数据框列表,每个元素都是数据框,上面的代码会逐个对每个数据框删除满足条件的行
  • 注意在子集化时要加上逗号x[!delete_row(x), ],这样才能保留所有列,否则如果只写x[!delete_row(x)]会变成按列索引,这可能不是你想要的效果

内容的提问来源于stack exchange,提问作者Adi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:48