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

旧版本R中sapply内\(y) lambda表达式的替代方案咨询

旧版本R中替换lambda表达式(y)的解决方案

数据集

name = c("john", "john", "john", "alex","alex", "tim", "tim", "tim", "ralph", "ralph")
year = c(2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012, 2014, 2016)
my_data = data.frame(name, year)

需求目标

统计存在至少一个缺失(非连续)年份的分组数量,预期输出如下:

# sample output
              year count
1       2014, 2016     1

问题原因

你遇到的错误是因为旧版本R(4.1.0之前)不支持\(y)这种简洁lambda表达式语法,该语法是R 4.1.0才引入的新特性。

修正后的代码

将\(y)替换为传统的function(y)写法即可,完整代码如下:

agg <- aggregate(year ~ name, my_data, c)
# 替换lambda表达式为function(y)
agg <- agg$year[sapply(agg$year, function(y) any(diff(y) != 1))]
# 统计非连续年份组合的出现次数并转为数据框
result <- as.data.frame(table(sapply(agg, paste, collapse = ", ")))
# 重命名列名匹配示例输出
colnames(result) <- c("year", "count")
print(result)

代码说明

  1. 第一步aggregate按name分组,把每个分组的year合并为向量;
  2. 第二步sapply遍历每个分组的年份向量,用function(y)判断年份是否连续(diff(y) !=1表示存在间隔),筛选出非连续的年份组;
  3. 最后将非连续的年份向量拼接为字符串,用table统计出现次数,再转为数据框并调整列名。

运行修正后的代码即可得到符合预期的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:40:21