如何在sapply函数中引用列表内的向量调用activity_stats?
批量处理列表元素的函数调用问题
你有一个包含43个元素的列表x,需要对每个子列表重复执行activity_stats()函数,传入每个子列表里的VECTORMAGNITUDECOUNTS和TIMESTAMPTZ字段。之前尝试用sapply但语法有误,正确的写法如下:
核心解决方法:匿名函数配合sapply
sapply的第二个参数需要是一个能接收列表单个元素的函数,用匿名函数可以自动遍历所有43个元素,提取对应字段传入函数:
x2 <- sapply(x, function(item) { activity_stats(item[["VECTORMAGNITUDECOUNTS"]], item[["TIMESTAMPTZ"]]) })
可选方案:返回数据框格式
如果activity_stats()返回的是向量,想把结果整理成数据框,可选择以下两种方式:
- 先通过
lapply生成结果列表,再合并为数据框:
# 生成每个元素的结果列表 x2_list <- lapply(x, function(item) { activity_stats(item[["VECTORMAGNITUDECOUNTS"]], item[["TIMESTAMPTZ"]]) }) # 合并成数据框 x2 <- do.call(rbind, x2_list)
- 用
purrr包的map_dfr简化操作:
library(purrr) x2 <- map_dfr(x, ~activity_stats(.x[["VECTORMAGNITUDECOUNTS"]], .x[["TIMESTAMPTZ"]]))
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

